我想做这样的事情,所以我可以创建一个模态对话框,我将用jQuery调用
<div class="modal" id="modalName" style="display: none;">
<div class="modal-header">
<a class="close" data-dismiss="modal">×</a>
<h3>Edit Contacts</h3>
</div>
@using (Html.BeginForm("Index", "Home", FormMethod.Post, new Dictionary<string, object> { { "class", "form-horizontal" } }))
{
<div class="modal-body">
@Html.EditorFor(model => new ViewModel(), "ViewModelTemplateName")
</div>
<div class="modal-footer">
<a href="#" class="btn" data-dismiss="modal">Close</a>
<button type="submit" class="btn btn-primary">
Submit</button>
</div>
}
</div>
在这一行
@Html.EditorFor(model => new ViewModel(), "ViewModelTemplateName")
我收到错误
模板只能用于字段访问,属性访问, 单维数组索引或单参数自定义索引器 表达式。
我不明白为什么它会关心实例的位置或内容(只要是正确的类型)
@ Html.Partial(&#34;〜/ Views / Shared / EditorTemplates / ViewModel.cshtml&#34;,新的ViewModel())可以解决问题,但我必须声明模板的完整路径...这很糟糕。
那么有更好的方法吗?
答案 0 :(得分:14)
从技术上讲,问题不在于实例。它是一个表达式,而不是一个函数,你要传递给EditorFor
使用的表达式解析器,以获取它用于识别属性等的元数据,不支持new
表达式。
您可以在EditorFor语句之外简单地声明模型的新实例,并执行以下操作:
@{ var emptyViewModel = new ViewModel(); }
@Html.EditorFor(model => emptyViewModel, "ViewModelTemplateName")
这应该有效。
那说 - 不使用表达式中model
的一部分有点奇怪。您可能应该考虑将对话框提取到它自己的部分视图中,该视图具有ViewModel
作为模型类型,然后您可以使用EditorForModel
,并使用{{1从此父视图调用它作为传递给它的模型。