ViewModel不会在提交时正确更新Model

时间:2015-06-10 16:19:49

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

我正在尝试使用强类型的ViewModel,并发现当我用ViewModel替换Model类时,无法从Edit模板正确提交更改。而只是在View中使用直接的Model类,编辑就成功进行了。我的模型类是MaterialDefinition,ViewModel类是MaterialDefinitionViewModel,如下所示。我已正确更新编辑模板以引用ViewModel但正如我所说编辑只是不起作用。我正在使用VS2013和MVC4。任何想法,某人?

首先是ViewModel类......

public class MaterialDefinitionViewModel
{
    // Properties
    public MaterialDefinition Definition { get; private set; }

    // Constructor
    public MaterialDefinitionViewModel(MaterialDefinition def)
    {
        Definition = def;
    }
}

现在来自View ...

的一些代码
<div class="editor-field">
    @Html.EditorFor(model => model.Definition.mdDescription)
    @Html.ValidationMessageFor(model => model.Definition.mdDescription)
</div>

<p>
    <input type="submit" value="Save" />
</p>

1 个答案:

答案 0 :(得分:1)

经过多次搜索后终于找到了答案......

    [HttpPost]
    public ActionResult Edit(string id, FormCollection collection)
    {
        MaterialDefinition def = repository.GetMaterialDefinition(id);
        UpdateModel(def, "Definition");
        //UpdateModel(def);
        repository.Save();
        return RedirectToAction("Details", new { id = def.mdID });
    }

事实证明,对于采用前缀“Name”属性的UpdateModel方法,存在一个不那么明显的重载。这是ViewModel中原始封装模型类的名称。 Controller的Edit Post方法中更正的代码片段如上所示。