我在mvc app中创建了一个编辑器模板,我想将模板中每个文本框的输入限制为只有数字。
在渲染时,我会在页面上多次渲染模板,因为视图可能有多个属性类型为电话号码,因此文本框的实际ID将获得唯一的名称。我可以在模板中添加一些jquery代码,减少代码重复,以及能够处理由mvc框架动态生成的ID问题的最佳方法是什么?
以下是我的模板:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<PhoneNumber>" %>
<span>
(<%= Html.TextBox("AreaCode", (Model == null) ? "" : Model.AreaCode, new { size = 3, maxlength = 3, style = "width:25px" })%>)
<%= Html.TextBox("Prefix", (Model == null) ? "" : Model.Prefix, new { size = 3, maxlength = 3, style = "width:25px" })%>-
<%= Html.TextBox("Suffix", (Model == null) ? "" : Model.Suffix, new { size = 3, maxlength = 4, style = "width:35px" })%>
<%= Html.TextBox("Extension", (Model == null) ? "" : Model.Extension, new { size = 10, maxlength = 10, style = "width:55px" })%>
</span>
答案 0 :(得分:2)
将每个文本框设置为具有特定的css类。然后使用jquery来处理类而不是id。然后,您还可以删除一些html属性,并在css类中专门定义它。
<%= Html.TextBox("AreaCode", (Model == null) ? "" : Model.AreaCode,
new { size = 3, maxlength = 3, @class = "number-textbox" }) %>
//jquery
$('.number-textbox').each(function()
{
//validate numbers method
});
//css
.number-textbox
{
width: 25px;
}
答案 1 :(得分:0)
您应该创建一个用户控件作为“模板”,并根据一些唯一标识用户控件的id使用绑定前缀。
像:
Html.TextBox("Contact1.AreaCode", [...])
但我认为你必须自己取回价值。
或者您可以创建自己的模型装订器来处理列表。
麦克