这只是困扰我的事情,我想知道是否有内置的方法。
假设您有一个Package
班级
public class Package
{
public A AObject { get; set; }
public B BObject { get; set; }
}
您有一个使用此Package
的视图。
public ActionResult Action()
{
return View(new Package());
}
现在视图将接受此模型,并有2个表单。
@model Path.To.Package
@Html.BeginForm("SubmitA", "MyController")
{
@Html.TextBoxFor(m => m.AObject.SomeProperty);
<input type="submit" />
}
@Html.BeginForm("SubmitB", "MyController")
{
@Html.TextBoxFor(m => m.BObject.AnotherProperty);
<input type="submit" />
}
如果上面需要创建两个以Package
作为参数的操作,那么这将毫无疑问地运行......
public JsonResult SubmitA(Package items) { ... }
public JsonResult SubmitB(Package items) { ... }
但是在SubmitA
,BObject将为null,而SubmitB
AObject将为null。
我的问题是你是否只能提交模特的一部分?因此,第一个表单只会提交AObject
和第二个BObject
,因此您可以通过以下操作实际获取这些内容:
public JsonResult SubmitA (A a) { ... }
public JsonResult SubmitB (B b) { ... }
答案 0 :(得分:1)
您可以使用Prefix
的{{1}}属性绑定到模型的复杂属性。绑定到模型时,该属性有效地从提交的名称/值对中删除前缀。
你的控制器方法是
BindAttribute
答案 1 :(得分:1)
您应该为每个表单使用单独的视图模型。当然,您可以使用绑定属性或在控制器操作中使用特定的属性名称。但是,这并不能解决你的真正问题。您只能获取其中一个值,而另一个对象将被取消分配或为NULL。这就是为什么每个视图/表单都应该有单独的视图模型。一旦拥有两个对象的值,就可以构建Package对象。