我有一个包含两个模型的视图模型,一个是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上,似乎找不到另一个相当匹配的问题。
答案 0 :(得分:4)
您只是将viewmodel绑定到服务器端的视图,但视图本身并没有以任何方式使用数据,因此当您提交它时,客户端可能无法知道您想要将一些数据发回服务器。如果您想要这样的行为,您需要在表单中包含一些字段,这样就可以将数据发送回服务器。
你必须明白,回归MVC并不是一个奇迹,但大部分工作都是为你完成的(例如绑定),但你必须提供最低限度的工作。如果您不想拥有带有文本框的表单,则可以使用例如@Html.HiddenFor(...)
帮助程序来为您需要发布到服务器的所有字段。
请注意,即使隐藏字段在浏览器中不可见,它们也是可见的和可编辑的(如果您知道如何),因此传递一些需要保护用户的数据是不安全的。< / p>
答案 1 :(得分:0)
在视图中输入一些textforms / dropdown或hiddentextbox,并将模型作为值,然后您应该在帖子上看到它。
因为它的视图不包含任何模型值,因此在回发时它将是空白的。