是否可以在c#方法中使用通用[绑定]?

时间:2015-09-15 06:30:38

标签: c# asp.net-mvc

我尝试做的是将我的响应中的每个incomming值绑定到动态/通用的字符串或字符串列表。

假设我知道我的请求的每个POST值,例如

string1 = Test
string2 = Test2

我会写:

[HttpPost]
public ActionResult DoFoo(string string1, string string2)
{
}

[HttpPost]
public ActionResult DoFoo(string string1, [Bind(Prefix = "string2")string myString2)
{
}

我的情况知道,我的帖子请求中有X个字符串。所以我不知道在我的后端捕获的确切数字和名称。 如何在不知道这个/如何动态捕获值的情况下捕获每个给定的Post-value?

1 个答案:

答案 0 :(得分:1)

当您必须绑定每个传入的响应字段时,我不会觉得为什么必须使用PrefixBIND。绑定不是一个好的选择。如果您同时拥有多个实体,则可以使用bind。 Reference here

  

我的帖子请求中有X个字符串。

如果必须使用所有字段,则可以使用FormCollectionModel对象来接收这些字段。 FormCollection自动从视图接收所有字段并将它们绑定到集合。有关正确的示例,请参阅this。下面是一个代码片段供参考。

[HttpPost]
public ActionResult Create(FormCollection collection)
{
    try
    {   
        Student student = new Student();

        student.FirstName = collection["FirstName"];
        student.LastName = collection["LastName"];
        DateTime suppliedDate;
        DateTime.TryParse(collection["DOB"], out suppliedDate);
        student.DOB = suppliedDate;
        student.FathersName = collection["FathersName"];
        student.MothersName = collection["MothersName"];

        studentsList.Add(student);
        return RedirectToAction("Index");
    }
    catch
    {
        return View();
    }
}

但是,如果您只需要处理一个特定字段/字段集,那么您可以根据自己的方便使用IncludeExclude BIND。显示的示例here和下面添加了代码剪切。

按照以下方式,您告诉您只想包含" FirstName"接收表单内容时的用户模型其他一切都将被丢弃。

[HttpPost]
public ViewResult Edit([Bind(Include = "FirstName")] User user)
{
    // ...
}

在以下示例中,您要告诉我们,请排除" IsAdmin"接收字段时的字段。在这种情况下,IsAdmin的值将为NULL,无论最终用户在视图中输入/修改的数据如何。但是,通过这种方式,除了IsAdmin之外,其他字段的数据将与user对象一起使用。

[HttpPost]
public ViewResult Edit([Bind(Exclude = "IsAdmin")] User user)
{
    // ...
}