2011-01-30 101 views
1

此代碼:ASP.NET MVC HTML輔助代碼轉換模型,屬性名

@Html.HiddenFor(model => model.Country.CountryId) 

給出了這樣的輸出:

<input type="hidden" id="Country_CountryId" name="Country.CountryId" /> 

有沒有辦法通過獲取上述代碼的id只使用模型?例如。

@Html.TestBoxFor(model => model.Country.CountryName, new { data_HiddenId= model.Country.CountryId.GetHtmlRenderOrSomething()) 

應該給這個:

<input type="text" id="Country_CountryName" name="Country.CountryName" data-HiddenId="Country_CountryId" /> 

我最關心的是data-HiddenId。我希望它等於上面爲hidden輸入生成的id

+0

@Darin季米特洛夫其不是我需要的ID的價值。我正在使用jquery通過id檢索隱藏的文本框。 jquery從第二個`input`屬性獲取這個Id:`data-HiddenId` – 2011-01-30 17:20:09

回答

2

你可以試試這個:

@Html.TestBoxFor(
    model => model.Country.CountryName, 
    new { 
     data_hiddenid = ExpressionHelper.GetExpressionText((Expression<Func<ModelType, int>>)(x => x.Country.CountryId)) 
    } 
) 

,並減少你可以寫一個自定義的HTML幫助醜陋:

public static class HtmlExtensions 
{ 
    public static MvcHtmlString TextBoxWithIdFor<TModel, TProperty, TId>(
     this HtmlHelper<TModel> htmlHelper, 
     Expression<Func<TModel, TProperty>> expression, 
     Expression<Func<TModel, TId>> idExpression 
    ) 
    { 
     var id = ExpressionHelper.GetExpressionText(idExpression); 
     return htmlHelper.TextBoxFor(expression, new { data_hiddenid = id }); 
    } 
} 

,然後簡單地說:

@Html.TestBoxWithIdFor(
    model => model.Country.CountryName, 
    model => model.Country.CountryId 
) 
+0

非常感謝,是否也可能只獲得表達式的最終對象?例如。 `CountryId` – 2011-01-30 17:53:37