【发布时间】:2015-10-02 04:01:58
【问题描述】:
我创建了一个 ViewModel,其中包含我的两个模型作为属性:
public class ViewModel
{
public Login loginVM;
public Person personVM;
}
Login 和 Person 对象的属性由用户输入填充到视图中,但是当我将 ViewModel 发送回我的控制器并尝试使用 Person/Login 属性时,它说它们返回为 null:
[HttpPost]
public ActionResult AddPerson(ViewModel vm)
{
DataBase da = new DataBase();
da.addLogin(vm.loginVM);
da.AddPerson(vm.personVM);
}
由于某种原因,vm.loginVM 和 vm.personVM 都为空。
我发现一篇博文似乎有人遇到过这个问题:https://garfbradazweb.wordpress.com/2012/03/08/mvc3-viewmodel-binding-to-controllerpost-methods/
但它似乎真的一点帮助都没有
【问题讨论】:
-
在 GET 的情况下,您是否尝试过
ActionResult AddPerson([FromUrl] ViewModel vm),如果是 POST:ActionResult AddPerson([FromBody] ViewModel vm) -
我认为
[HttpPost]应该在方法而不是VM之上! -
能否添加您的 (CS)HTML 代码,以便我们查看是否有错误的绑定?
-
@annemartijn 我有点害怕发布所有代码,因为这是一个工作项目,但我通过执行类似@Html.LabelFor(model => model.personVM.first_name, "First Name:") 或 @Html.TextBoxFor(model => model.loginVM.login_name, new { maxlength = "20" }) 用于模型的所有属性
-
我发现了问题所在。在控制器方法中,我必须使用( [Bind(Prefix = "personVM")] Person personModel, [Bind(Prefix = "loginVM")] Login loginModel )作为参数,就像我在开篇文章中发布的文章一样。但是,在我使用 Bind(Prefix="Person") 和 Bind(Prefix="Login") 而不是 personVM 和 loginVM @annemartijn
标签: c# asp.net-mvc model-view-controller