传递给HttpPost操作的模型对象具有空值

时间:2013-08-22 05:40:24

标签: c#-4.0 asp.net-mvc-4

我有一个声明了属性的模型,控制器动作。和指定Viewmodel的视图。 我填写表单中的数据并提交,但模型只有所有属性的空值。如果我尝试使用视图模型,我会在HttpPost操作中获得相同的空值。 我的模特:

public class Supplier
{
    public string SupplierSequenceNumber { get; set; }

    public string SupplierName { get; set; }

    public string SupplierActive { get; set; }
}

我的控制器:

[HttpGet]
    public ActionResult Add()
    {
        SupplierVM objSupplierVM = new SupplierVM();
        return View(objSupplierVM);
    }

    [HttpPost]
    public ActionResult Add(Supplier objSupplier)
    {
        return View();
    }

我的观点:

 @model AIEComm.ViewModel.SupplierVM
 @using (Html.BeginForm("Add", "Supplier", FormMethod.Post, new { id = "formAddSupplier" }))
{
   <div class="control-group">
            @Html.LabelFor(m=>m.objSupplier.SupplierName, new{@class = "control-label"})
             <div class="controls">
             @Html.TextBoxFor(m => m.objSupplier.SupplierName, new { placeholder = "Swatch Style" })
             @Html.ValidationMessageFor(m=>m.objSupplier.SupplierName)
             </div>
           </div>
           <div class="control-group">
            @Html.LabelFor(m=>m.objSupplier.SupplierActive, new{@class = "control-label"})
             <div class="controls">
             @Html.DropDownListFor(m=>m.objSupplier.SupplierActive,new SelectList(AIEComm.Models.Utilities.YesNoSelectList,"Value","Text"),new{@class=""})
             @Html.ValidationMessageFor(m=>m.objSupplier.SupplierName)
             </div>
           </div>
           <div class="control-group">
               <div class="controls">
                  <input type="submit" class="btn btn-primary" id="btnSubmit" value="Add"/>
               </div>
           </div>
}

1 个答案:

答案 0 :(得分:1)

原因如下:

m => m.objSupplier.SupplierName

您正在使用ViewModel中的模型生成HTML元素。这是一个很好的方法,你的问题很容易解决。

这是一个很好的方法,因为你保持组织有序,但由于上面的代码说:

,它不起作用
  

好的,使用ViewModel对象(m),获取objSupplier对象,然后使用SupplierName属性。

这很好,但是当你提交数据时,你会说(对行动):

  

嗨,我有SupplierName财产。请将其放入objSupplier对象中可以找到的ViewModel对象。

动作说“嗯,我期待一个objSupplier对象,但你说的是什么ViewModel?”

一个简单的解决方案是创建一个新的局部视图来生成表单。它的模型类型应该是:

<强> _SupplierForm.cshtml

@model Supplier

@* // The Form *@

在您的视图中,继续使用相同的ViewModel,但传递正确的供应商模型:

@model AIEComm.ViewModel.SupplierVM

@Html.Partial("_SupplierForm", Model.objSupplier)