0

我有一个声明了属性的模型,控制器动作。并使用指定的 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>
}
4

1 回答 1

2

原因是以下代码:

m => m.objSupplier.SupplierName

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

这是一个很好的方法,因为你让事情井井有条,但它不起作用,因为上面的代码说:

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

这很好,但是当您提交数据时,您是在说(对操作):

你好,我有SupplierName房产。请将其放入objSupplier您可以在对象内部找到的ViewModel对象中。

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

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

_SupplierForm.cshtml

@model Supplier

@* // The Form *@

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

@model AIEComm.ViewModel.SupplierVM

@Html.Partial("_SupplierForm", Model.objSupplier)
于 2013-08-22T06:08:48.980 回答