ASP.Net MVC EditorTemplate错误的ID

时间:2013-06-03 13:24:08

标签: c# asp.net-mvc asp.net-mvc-4 mvc-editor-templates

所以我有一个名为double的{​​{1}}字段。我这样打印:

Area

My EditorTemplate for Double看起来像这样:

<div>@Html.EditorFor(model => model.Area)</div>

很好,但为什么html元素出错为@{ var attributes = this.ViewData.ModelMetadata.ContainerType.GetProperty(this.ViewData.ModelMetadata.PropertyName).GetCustomAttributes(true); var htmlAttributes = GAtec.AgroWeb.Basic.Ux.Web.Helpers.EditorTemplateHelper.GetAllAttributes(ViewData, attributes); var decimalPlaces = htmlAttributes["data-format"].ToString().Split(','); var value = decimalPlaces.Length > 1 ? Model.ToString("n" + decimalPlaces[1]) : Model.ToString(); @System.Web.Mvc.Html.InputExtensions.TextBox(this.Html, Html.NameFor(model => model).ToString(), value, htmlAttributes); } <script> $(document).ready(function () { $("#@Html.IdFor(model => model)").restrictNumber(); }); </script> 而jQuery选择器出现为<input id="Area_Area" />

当我在点击时观看它们时,$("#Area")NameFor都会返回“区域”

更新:

我的IdFor(如@DarinDimitrov问)返回此数组:

htmlAttributes

2 个答案:

答案 0 :(得分:2)

当您只需将class="number"附加到输入字段然后将您的javascript外部化到单独的文件中时,在视图中填充内联脚本(每个编辑器模板一个)的重点是什么? javascript所属的地方)只需使用类选择器:

$(document).ready(function () {
    $(".number").restrictNumber();
});

答案 1 :(得分:1)

@System.Web.Mvc.Html.InputExtensions.TextBox(this.Html, "", value, htmlAttributes);

这解决了我的问题。关键是,MVC知道模型名称,因此您不必说他要打印什么。如果这样做,它将与模型名称连接。但为什么会这样做,我真的不知道。