ViewModel中的null值

时间:2010-11-24 10:14:12

标签: linq asp.net-mvc-2 viewmodel

我有一个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");
        }

1 个答案:

答案 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) %>