【问题标题】:HTML.EditorFor renders nested class properties without idHTML.EditorFor 呈现没有 id 的嵌套类属性
【发布时间】:2017-12-08 22:39:43
【问题描述】:

这是一个 ASP.Net Web 应用程序,是 Webforms 和 MVC v5.2.3 的混合体。当我在嵌套类的属性上调用 Html.EditorFor 时,输入呈现没有“id”属性。怎么来的?我可以在模型中更改什么来强制 asp.net 呈现“id”属性吗?

我的模型“Parent”包含一个嵌套类“Child”:

public class Parent
{
    public string ParentName {get;set;}

    public class _Child
    {
        public string ChildName {get;set;}
    }

    public Child _Child {get;set;}
}

在视图中,当我使用 Html.EditorFor() 渲染 Parent.ParentName 时,它​​同时使用“Name”和“Id”属性进行渲染。换句话说,当我把它放在 *.cshtml 文件中时:

@Html.EditorFor(m => m.ParentName)

它呈现以下 HTML:

<input id="ParentName" name="ParentName" type="text" value="" />

但是,当我渲染 Parent._Child.ChildName 时,它​​渲染时没有“Id”属性。换句话说,当我把它放在 *.cshtml 文件中时:

@Html.EditorFor(m => m._Child.ChildName)

它呈现以下 HTML,没有“id”属性:

<input name="_Child.ChildName" type="text" value="" />

怎么会?我可以做任何我模型来强制生成“id”吗?我意识到我可以使用新的 HtmlAttributes 等自己添加它。

【问题讨论】:

  • 为什么不为 id 创建一个带有隐藏类的输入?
  • _Child 改为以字母开头?
  • 谢谢@MarkSchultheiss,这确实是问题所在。您能否将您的评论更改为答案?然后我可以选择它并指导后代。

标签: asp.net-mvc


【解决方案1】:

这使用了HTML 4规范https://www.w3.org/TR/html401/types.html#case-sensitive,它说必须以字母开头,将下划线改为字母就可以了。

纯属意见,但无论如何我都不会在这里使用下划线,因为它更难输入。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多