我正在尝试使用强类型的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>
答案 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方法中更正的代码片段如上所示。