帶有用於 mvc 的 html 編輯器的數據屬性
編輯器的數據屬性不工作。
@Html.EditorFor(model => model.SireTag, new { data_typeahead = "dsfsdfsd" })當我打開我的 chrome 瀏覽器時,我看不到我的文本框的任何數據屬性。我嘗試了護目鏡,但沒有發現任何有用的東西。
第二個
object參數Html.EditorFor不是用於 HTML 屬性,而是用於附加視圖數據。EditorFor助手不允許以例如更具體的助手<input>所做的方式自定義 HTML 屬性 - 他們從模型元數據(例如[Attributes])中獲取大部分設置。“修復”的最簡單方法顯然是下降
EditorFor:@Html.TextBoxFor(model => model.SireTag, new { data_typeahead = "dsfsdfsd" })或者,為該屬性編寫您自己的 EditorTemplate。這可以允許您通過從(或“預先輸入”)檢索
data_typeahead值來使用(或簡化)原始語法。ViewData["data_typeahead"]更進一步,更高級,您可以將自己
Attribute的應用到您的模型屬性 + 您自己的ModelMetadataProvider(或者 - 更簡單 - 使用IMetadataAware,更多內容見下文)將其轉換為 EditorTemplate 可以使用的元數據 - 這是為了刪除完全從您的視圖中決定data-屬性,將您的呼叫變成:@Html.EditorFor(model => model.SireTag)…和你的模型變成這樣的:
public class MyModel { [Typeahead("dsfsdfsd")] public string SireTag { get; set; } }此方法使用 IMetadataAware 的範例:
[AttributeUsage(AttributeTargets.Property)] public class TypeaheadAttribute : Attribute, IMetadataAware { private readonly string value; public TypeaheadAttribute(string value) { this.value = value; } public void OnMetadataCreated(ModelMetadata metadata) { metadata.AdditionalValues["typeahead"] = value; } }然後可以使用
ViewContext.ViewData.ModelMetadata.AdditionalValues(字典)在 EditorTemplate 中提取此元數據條目,並將結果添加到傳遞給 eg 的屬性字典中Html.TextBox。
實際上,您可以使用 EditorFor 並發送額外的 HTML 屬性。使用此重載並設置
additionalViewData參數。它需要一個具有htmlAttributes屬性的對象:@Html.EditorFor( model => model.SireTag, new { htmlAttributes = new { data_typeahead = "dsfsdfsd" } } )這將產生類似的東西:
<input id="SireTag" name="SireTag" ... data-typeahead="dsfsdfsd">