ASP.NET表单提交模型的一部分

时间:2016-09-14 10:04:52

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

这只是困扰我的事情,我想知道是否有内置的方法。

假设您有一个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) { ... }

2 个答案:

答案 0 :(得分:1)

您可以使用Prefix的{​​{1}}属性绑定到模型的复杂属性。绑定到模型时,该属性有效地从提交的名称/值对中删除前缀。

你的控制器方法是

BindAttribute

答案 1 :(得分:1)

您应该为每个表单使用单独的视图模型。当然,您可以使用绑定属性或在控制器操作中使用特定的属性名称。但是,这并不能解决你的真正问题。您只能获取其中一个值,而另一个对象将被取消分配或为NULL。这就是为什么每个视图/表单都应该有单独的视图模型。一旦拥有两个对象的值,就可以构建Package对象。