我有一个带有EF4模型的简单MVC3应用程序
Log
.Name
.CreatedDate
.LogTypeId
LogTypes
.Id
.Description
和ViewModel
LogViewModel
Log MyLog
List<SelectListItem> Options
LogViewModel(){
Log = new Log();
}
这在我的视图中正确显示,我可以编辑/更新值,显示下拉列表并将名称设置为“MyTestValue”。
但是,在我的控制器的HttpPost Create方法中,没有设置logVm.Log的属性?
[HttpPost]
public ActionResult Create(LogViewModel logVm){
logVm.Log.Name == "MyTestvalue"; //false - in fact its null
}
我做错了什么?
答案 0 :(得分:3)
这可能是因为在您的编辑表单中您没有相应的值。因此,如果yuor视图强类型为LogViewModel
,则表单输入名称必须适当地命名为:
@model LogViewModel
@using (Html.BeginForm())
{
<div>
@Html.LabelFor(x => x.Log.Name)
@Html.EditorFor(x => x.Log.Name)
</div>
<div>
@Html.LabelFor(x => x.Log.SomeOtherProperty)
@Html.EditorFor(x => x.Log.SomeOtherProperty)
</div>
...
<input type="submit" value="OK" />
}
表示提交表单时,POSTed值如下所示:
Log.Name=foo&Log.SomeOtherProperty=bar
现在,默认的模型绑定器将能够成功绑定您的视图模型。还要确保您尝试分配的属性是公共的,并且具有setter。
答案 1 :(得分:0)
控制器方法应具有名为 model
的属性[HttpPost]
public ActionResult Create(LogViewModel **model**){
**model**.Log.Name == "MyTestvalue"; //true }