我有一个声明了属性的模型,控制器动作。和指定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>
}
答案 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)