我有一个ViewModel(StoreViewModel)。当我从VM获取从View到Controller(Post)的值时,某些值为null,只有View上显示的某些值不为null
Plz帮帮我
public class StoreViewModel
{
public StoreViewModel() { }
public Store Store { get; set; }
public List<Member> Members { get; set; }
public List<Order> Orders { get; set; }
public List<AccountPayable> AccountsPayable { get; set; }
}
这是我的观点
<% using(Html.BeginForm()) {%>
<div><%: Html.TextBoxFor(model => model.Store.Name) %></div>
<div><%: Html.TextBoxFor(model => model.Store.State) %></div>
<div><input type="submit" value="Submit" /></div>
<% } %>
我在实体店,会员,订单,AccountPayable中的列上设置[HiddenInput(DisplayValue = false)]
+++
这是我的控制器。 (我尝试使用FormCollection从View中获取值,但是......不成功)
[HttpPost]
public ActionResult Details(Finger finger, StoreViewModel storeVM)
{
//if (finger.roleName != "Administrator")
// return RedirectToAction("DisplayNotice", "Notice");
storeVM.Store.Active = (CheckBoxHelpers.GetValue(storeVM.Store.Active)).ToString();
if (ModelState.IsValid)
{
storesRep.SaveStore(storeVM.Store, true);
}
else
{
return View(storeVM);
}
return RedirectToAction("List", "Stores");
}
答案 0 :(得分:1)
您应该确保该值实际存在于POST请求中。你得到null
的事实强烈表明事实并非如此。您可以使用FireBug来确切地查看发布到服务器的值。
此外,我可以看到您的表单只包含商店名称和州文本字段,因此这些是您在POST操作中可以获得的唯一值:
<% using(Html.BeginForm()) {%>
<div><%: Html.TextBoxFor(model => model.Store.Name) %></div>
<div><%: Html.TextBoxFor(model => model.Store.State) %></div>
<div><input type="submit" value="Submit" /></div>
<% } %>
您可能还需要包含其他内容。您可以使用隐藏字段发送所需的值。
在您的控制器操作中,您正尝试阅读storeVM.Store.Active
字段,因此请参阅
它以你的形式:
<%: Html.HiddenFieldFor(model => model.Store.Active) %>