用于将:list<>,对象和基元的混合传递给ASP MVC控制器动作的方法

时间:2012-08-24 21:35:53

标签: c# asp.net asp.net-mvc

我是C#的新手,正在创建我的第一个MVC项目,并且很难找到将不同类型的3个参数传递给控制器​​动作的方法。这是我的控制器方法:

public ActionResult Create(Notification notification, string hash, list<int> users){
    //code inside method irrelevant...
}

和我的通知模型:

public class Notification
{
    public int ID { get; set; }
    public string ApplicationID { get; set; }
    public string Description { get; set; }
    public System.DateTime DateStamp { get; set; }
}

在我添加List&lt;&gt;之前参数通过如此发布数据(或查询字符串)工作正常:

ApplicationID=1&Description=yo&hash=abcdefg 

它神奇地知道两个参数('ApplicationID'和'Description')属于通知对象。但现在我想添加一个列表&lt;&gt;整数。

这是可以完成的吗?你将如何格式化传递的数据/查询字符串?

1 个答案:

答案 0 :(得分:3)

  

这是可以做的事吗

  

以及如何格式化传递的数据/查询字符串?

像这样:

ApplicationID=1&Description=yo&hash=abcdefg&users=1&users=2&users=3

或者你喜欢这样:

ApplicationID=1&Description=yo&hash=abcdefg&users[0]=1&users[1]=2&users[2]=3

另外,您可能会发现following blog post是一本有用的读物​​。

但在将控制器操作签名转换为一些spaghettified代码和代码读者之前,必须水平循环几个屏幕以查看此操作所需的数百万个参数,停止疯狂并引入视图模型:

public class CreateViewModel
{
    public Notification Notification { get; set; }
    public string Hash { get; set; }
    public List<int> Users { get; set; }
}

然后:

public ActionResult Create(CreateViewModel model)
{
    //code inside method irrelevant...
}

然后:

notification.applicationID=1&notification.description=yo&hash=abcdefg&users[0]=1&users[1]=2&users[2]=3