未使用 ASP.NET MVC EditorTemplate

Posted

技术标签:

【中文标题】未使用 ASP.NET MVC EditorTemplate【英文标题】:ASP.NET MVC EditorTemplate not being used 【发布时间】:2015-06-22 11:59:45 【问题描述】:

我目前正在 ASP.NET MVC 中创建一个网站,我想使用 EditorTemplates 在我的 ViewModel 中显示一个列表。 RowViewModel 有一个 RowDataViewModel 列表。我正在尝试为 RowViewModel 创建一个视图,我可以在其中使用

@html.EditorFor(model => model.RowData)

因此我需要一个 EditorTemplate。我在下面创建了EditorTemplate:

Views/Shared/EditorTemplates/RowDataViewModel.cshtml

我还尝试将 EditorTemplates 文件夹放在 /Home/ 视图文件夹下,但似乎没有任何效果。在编辑器模板中没有遇到断点。我想我以前这样做过,但我可能会忘记一些事情。

有什么想法吗?

RowViewModel:

public class RowViewModel

    [Required]
    [Display(Name="Name")]
    public string Name  get; set; 

    public List<RowDataViewModel> RowData  get; set; 

RowDataViewModel:

public class RowDataViewModel

    public string Name  get; set; 
    public string Value  get; set; 
    public string DataType  get; set; 

EditorTemplate - RowDataViewModel.cshtml:

@using iDealWebRole.ViewModels
@model RowDataViewModel

@Html.ValidationSummary(true, "", new  @class = "text-danger" )
<div class="form-group">
    @Html.LabelFor(model => model.Name, htmlAttributes: new  @class = "control-label col-md-2" )
    <div class="col-md-10">
        @Html.EditorFor(model => model.Value, new  htmlAttributes = new  @class = "form-control"  )
        @Html.ValidationMessageFor(model => model.Value, "", new  @class = "text-danger" )
    </div>
</div>

【问题讨论】:

你的意思是@Html.EditorFor(model =&gt; model.RowData)(不是@model.EditorFor(...))? 只是我帖子中的一个错字。现在更正了:) 您在此处显示的代码很好,并且可以正常工作。肯定有其他问题。 我是这么想的,对吧?我真的找不到代码的任何问题。难道我无法为视图模型制作和编辑器模板吗? 你确定属性RowData确实包含一些要渲染的项目吗? 【参考方案1】:

问题出在这里:@Html.EditorFor(model =&gt; model.RowData)

您应该对 RowData 中的每一行使用您的编辑器,例如:

@for (int i = 0; i < Model.RowData.Count(); i++)

    @Html.EditorFor(model => Model.RowData[i])

【讨论】:

这将生成重复的id(无效的html)和重复的name属性,这些属性不会在回发时绑定到集合。 Stephen Muecke 评论的编辑答案。

以上是关于未使用 ASP.NET MVC EditorTemplate的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET MVC 动态模型未被识别

使用 Kendo UI Asp.net mvc core 未显示图表组件

未记录 ELMAH 和 ASP.NET MVC 自定义错误

未验证 ASP.NET MVC5 模型

使用 WebClient 访问时,ASP.NET MVC 应用程序返回未授权 (401) 进行重定向

Stripe PaymentIntent 键未定义 |无法从控制器传递 ClientSecret 密钥 | ASP.NET MVC