gpt4 book ai didi

c# - 如何在没有 View 模型的情况下使用@Html.EditorFor()

转载 作者:太空狗 更新时间:2023-10-29 22:14:28 26 4
gpt4 key购买 nike

我想做这样的事情,这样我就可以创建一个模态对话框,我稍后会用 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")

我得到了错误

Templates can be used only with field access, property access, single-dimension array index, or single-parameter custom indexer expressions.

我不明白为什么它会关心实例在哪里或是什么(只要它的类型正确)

@Html.Partial("~/Views/Shared/EditorTemplates/ViewModel.cshtml", new ViewModel()) 可以解决问题,但我必须声明模板的完整路径……这有点糟糕。

那么有没有更好的方法呢?

最佳答案

从技术上讲,问题不在于实例。它是一个表达式,而不是一个函数,您将传递到那里,EditorFor 使用的表达式解析器,用于获取它用于识别属性等的元数据,不会不支持 new 表达式。

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

@{ var emptyViewModel = new ViewModel(); }
@Html.EditorFor(model => emptyViewModel, "ViewModelTemplateName")

这应该有效。

就是说 - 在表达式中使用部分 model 有点奇怪。您也许应该考虑将对话框提取到它自己的部分 View 中,该部分 View 具有 ViewModel 作为模型类型,然后您可以在其中使用 EditorForModel,并从此父级调用它使用 new ViewModel() 作为传递给它的模型进行查看。

关于c# - 如何在没有 View 模型的情况下使用@Html.EditorFor(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10238206/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com