ViewModel回发null

时间:2014-09-08 18:49:54

标签: c# asp.net-mvc model-binding

我有一个包含两个模型的视图模型,一个是IList:

public class PersonViewModel
{
   public Person person { get; set; }
   public IList<Snack> { get; set; }
}

这会输出我的主视图和局部视图所需的所有数据。我遇到的问题是当我点击与提交按钮关联的动作时。

 @using (Html.BeginForm("ProcessSnacks", "Person", FormMethod.Post))
 {
     <input id="process" type="submit" value="Process Snacks" />
 }

在我的控制器上我有:

public ActionResult ProcessSnacks(PersonViewModel vm)
{     
   //ViewModel is NULL here...
}

我实际上只需要PersonViewModel中的Person模型中的数据并尝试了很多排列...我尝试过将person作为参数而不是视图模型,但没有运气。我一直都在StackOverflow上,似乎找不到另一个相当匹配的问题。

2 个答案:

答案 0 :(得分:4)

您只是将viewmodel绑定到服务器端的视图,但视图本身并没有以任何方式使用数据,因此当您提交它时,客户端可能无法知道您想要将一些数据发回服务器。如果您想要这样的行为,您需要在表单中包含一些字段,这样就可以将数据发送回服务器。

你必须明白,回归MVC并不是一个奇迹,但大部分工作都是为你完成的(例如绑定),但你必须提供最低限度的工作。如果您不想拥有带有文本框的表单,则可以使用例如@Html.HiddenFor(...)帮助程序来为您需要发布到服务器的所有字段。

请注意,即使隐藏字段在浏览器中不可见,它们也是可见的和可编辑的(如果您知道如何),因此传递一些需要保护用户的数据是不安全的。< / p>

答案 1 :(得分:0)

在视图中输入一些textforms / dropdown或hiddentextbox,并将模型作为值,然后您应该在帖子上看到它。

因为它的视图不包含任何模型值,因此在回发时它将是空白的。

相关问题