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")ですか?

デバッグでそれらを見ると、両方とも「エリア」NameForIdFor返します。

アップデート:

私のhtmlAttributes(@ DarinDimitrovが尋ねたように)この配列を返します:

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

2 に答える 2

2

入力フィールドにa を単純に追加してclass="number"から、別のファイル (javascript が属する場所) に javascript を外部化して、単純に aクラスセレクター:

$(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 に答える