ViewModel posting back null
本文关键字:null back posting ViewModel | 更新日期: 2023-09-27 18:21:04
我有一个视图模型,它包含两个模型,一个是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,似乎找不到另一个完全匹配的问题。
您只是将viewmodel绑定到服务器端的视图,但视图本身不会以任何方式使用数据,因此当您提交它时,客户端不可能知道您想要将一些数据发布回服务器。如果你想要这样的行为,你需要在表单中有一些字段,这样就可以将数据发送回服务器。
你必须明白,在MVC中发布并不是什么奇迹,尽管大多数工作都是为你完成的(例如绑定),但你必须提供最低限度的工作。如果您不希望有一个带有文本框的表单,您可以使用例如@Html.HiddenFor(...)
助手来处理您需要发布到服务器的所有字段。
请注意,即使隐藏字段在浏览器中不可见,但它们是可见和可编辑的(如果您知道如何操作的话),因此传递一些需要保护的数据对用户来说是不安全的。
在视图中放入一些以模型为值的textforms/dropdown或hiddentextboxes,然后您应该会在返回的帖子中看到它。
目前,您的视图不包含任何模型值,因此在回发时它将为空。