如何在没有视图模型的情况下使用@ Html.EditorFor()

Pet*_*ter 5 c# asp.net-mvc editorformodel

我想做这样的事情,所以我可以创建一个模态对话框,我将用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>
Run Code Online (Sandbox Code Playgroud)

在这条线上

@Html.EditorFor(model => new ViewModel(), "ViewModelTemplateName")
Run Code Online (Sandbox Code Playgroud)

我收到了错误

模板只能用于字段访问,属性访问,单维数组索引或单参数自定义索引器表达式.

我不明白为什么它会关心实例的位置或内容(只要它的类型正确)

@ Html.Partial("〜/ Views/Shared/EditorTemplates/ViewModel.cshtml",新的ViewModel())可以解决这个问题,但是我必须声明模板的完整路径......这很糟糕.

这样有更好的方法吗?

And*_*tan 14

从技术上讲,这不是问题的实例.它是一个表达式,而不是一个函数,你正在传递它,并且使用EditorFor它来获取用于识别属性等的元数据的表达式解析器不支持new表达式.

您可以在EditorFor语句之外简单地声明模型的新实例,并执行以下操作:

@{ var emptyViewModel = new ViewModel(); }
@Html.EditorFor(model => emptyViewModel, "ViewModelTemplateName") 
Run Code Online (Sandbox Code Playgroud)

这应该工作.

这就是说 - 使用model表达式中的部分内容有点奇怪.您应该考虑将对话框提取到它自己的部分视图中,该视图具有ViewModel模型类型,然后您可以使用EditorForModel它,并使用new ViewModel()作为传递给它的模型从此父视图中调用它.