2013-06-03 48 views
0

所以我有一個double字段叫做Area。我打印這樣說:ASP.Net MVC EditorTemplate錯誤Id

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

我爲雙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都返回「Area」當我看着他們在debbuging。

UPDATE:

htmlAttributes(如@DarinDimitrov問)返回此數組:

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

很難說不知道'EditorTemplateHelper.GetAllAttributes'方法返回了什麼。 –

回答

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

這解決了我的問題。問題是,MVC知道型號名稱,所以你不必說他要打印什麼。如果你這樣做,它將與模型名稱一致。但爲什麼這樣做,我真的不知道。

2

您有什麼看法裏面內嵌腳本的餡gazilions點(每個編輯模板)時,你可以簡單地將class="number"附加到你的輸入字段,然後將你的javascript外部化在一個單獨的文件中(這是javascript所屬的地方),並簡單地使用類選擇器:

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

Yeahm我知道。不錯的提示,但這個代碼不是我的。我會建議。看看我的更新。 – DontVoteMeDown