自定义 EditorFor 模板和 htmlAttributes
Custom EditorFor Template and htmlAttributes
我正在尝试使用 EditorFor 自定义模板。
我想创建一个 Int32 和 decimal 模板来呈现带有一些验证的输入。
这就是我正在尝试的
@model int?
@Html.TextBoxFor(model => model, null, new { @type="text", @oninput = "this.value=this.value.replace(/[^0-9]/g,'')" } )
我这样称呼它
@Html.EditorFor(x => x.ExampleIntField)
它呈现 <input type="text", oninput="this.value=this.value.replace(/[^0-9]/g,'')"
到这里一切正常,但是当我尝试传递额外的 htmlAttributes 时 readonly
我不明白我必须如何在 EditorFor 模板中接收它。
例子
@Html.EditorFor(x => x.ExampleIntField, new { htmlAttributes = new { @readonly = "readonly" } } )
我试过这个我得到了完全相同的 <input type="text", oninput="this.value=this.value.replace(/[^0-9]/g,'')"
渲染没有 readonly attribute
您正在使用 EditorFor()
的 overload 将对象传递为 additionalViewData
。您可以在 ViewDataDictionary
的模板中阅读该内容
@model int?
@{ var attributes = ViewData["htmlAttributes"]; } // returns { @readonly = "readonly" }
然后您可以将其与现有属性合并并在 TextBoxFor()
方法中使用。
@{
var htmlAttributes = HtmlHelper.AnonymousObjectToHtmlAttributes(attributes);
htmlAttributes.Add("oninput", "this.value=this.value.replace(/[^0-9]/g,'')";
}
@Html.TextBoxFor(model => model, htmlAttributes)
请注意,TextBoxFor()
会生成 type="text"
,因此无需再次添加。此外,您不需要前导 @
除非它是保留关键字(例如 @class = "..."
)
我正在尝试使用 EditorFor 自定义模板。
我想创建一个 Int32 和 decimal 模板来呈现带有一些验证的输入。
这就是我正在尝试的
@model int?
@Html.TextBoxFor(model => model, null, new { @type="text", @oninput = "this.value=this.value.replace(/[^0-9]/g,'')" } )
我这样称呼它
@Html.EditorFor(x => x.ExampleIntField)
它呈现 <input type="text", oninput="this.value=this.value.replace(/[^0-9]/g,'')"
到这里一切正常,但是当我尝试传递额外的 htmlAttributes 时 readonly
我不明白我必须如何在 EditorFor 模板中接收它。
例子
@Html.EditorFor(x => x.ExampleIntField, new { htmlAttributes = new { @readonly = "readonly" } } )
我试过这个我得到了完全相同的 <input type="text", oninput="this.value=this.value.replace(/[^0-9]/g,'')"
渲染没有 readonly attribute
您正在使用 EditorFor()
的 overload 将对象传递为 additionalViewData
。您可以在 ViewDataDictionary
@model int?
@{ var attributes = ViewData["htmlAttributes"]; } // returns { @readonly = "readonly" }
然后您可以将其与现有属性合并并在 TextBoxFor()
方法中使用。
@{
var htmlAttributes = HtmlHelper.AnonymousObjectToHtmlAttributes(attributes);
htmlAttributes.Add("oninput", "this.value=this.value.replace(/[^0-9]/g,'')";
}
@Html.TextBoxFor(model => model, htmlAttributes)
请注意,TextBoxFor()
会生成 type="text"
,因此无需再次添加。此外,您不需要前导 @
除非它是保留关键字(例如 @class = "..."
)