ViewModel在Model中没有使用HttpPost Create方法设置属性

时间:2011-05-31 14:19:36

标签: asp.net-mvc-3 viewmodel http-post

我有一个带有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
}

我做错了什么?

2 个答案:

答案 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    }