我尝试做的是将我的响应中的每个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?
答案 0 :(得分:1)
当您必须绑定每个传入的响应字段时,我不会觉得为什么必须使用Prefix
和BIND
。绑定不是一个好的选择。如果您同时拥有多个实体,则可以使用bind。 Reference here
我的帖子请求中有X个字符串。
如果必须使用所有字段,则可以使用FormCollection
或Model
对象来接收这些字段。 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();
}
}
但是,如果您只需要处理一个特定字段/字段集,那么您可以根据自己的方便使用Include
或Exclude
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)
{
// ...
}