0

所以我有一个double名为Area. 我这样打印:

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

我的 Double EditorTemplate 看起来像这样:

@{
    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>

很好,但为什么 html 元素出现错误<input id="Area_Area" />而 jQuery 选择器出现正确$("#Area")

当我在调试时观察它们并NameFor返回IdFor区域” 。

更新:

我的htmlAttributes(正如@DarinDimitrov 所问)返回这个数组:

["data-min": "0.0", "data-format": "0,2"]
4

2 回答 2

2

class="number"当您可以简单地将 a 附加到您的输入字段然后将您的 javascript 外部化到一个单独的文件中(这是 javascript 所属的位置)并简单地使用时,在您的视图中填充大量内联脚本(每个编辑器模板一个)有什么意义类选择器:

$(document).ready(function () {
    $(".number").restrictNumber();
});
于 2013-06-03T13:30:39.287 回答
1
@System.Web.Mvc.Html.InputExtensions.TextBox(this.Html, "", value, htmlAttributes);

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

于 2013-06-03T16:42:57.687 回答