2013-05-28 29 views
2

我有一個EditorTemplate,其中包含一組Radio Button。MVC RadioButtonFor爲每個元素輸出相同的標識

<div class="vote"> 
    @Html.RadioButtonFor(x => x.Vote, 1, new { @class = "rdbn" }) 
    @Html.RadioButtonFor(x => x.Vote, 2, new { @class = "rdbn" }) 
    @Html.RadioButtonFor(x => x.Vote, 3, new { @class = "rdbn" }) 
</div> 

當運行該應用程序的輸出是:

<div class="vote"> 
    <input id="Reviews_0__Vote" type="radio" class="myCssClass" value="1" name="Reviews[0].Vote"> 
    <input id="Reviews_0__Vote" type="radio" class="myCssClass" value="2" name="Reviews[0].Vote"> 
    <input id="Reviews_0__Vote" type="radio" class="myCssClass" value="3" name="Reviews[0].Vote"> 
</div> 
<div class="vote"> 
    <input id="Reviews_1__Vote" type="radio" class="myCssClass" value="1" name="Reviews[1].Vote"> 
    <input id="Reviews_1__Vote" type="radio" class="myCssClass" value="2" name="Reviews[1].Vote"> 
    <input id="Reviews_1__Vote" type="radio" class="myCssClass" value="3" name="Reviews[1].Vote"> 
</div> 

的問題是,所述input元素的ID是每個時間是相同的。我試圖在這些單選按鈕上運行一些jquery,但顯然我無法確定每個單元的ID是否相同。有沒有一種簡單的方法可以讓ID每次都獨一無二,而無需使用HTML屬性手動指定ID?

回答

2

爲了節省您不必設置的ID每次屬性,你可以創建一個類似於以下(另)一個擴展方法:

public static MvcHtmlString RadioButtonListFor<TModel, TProperty> 
    (this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, 
     IEnumerable<object> values, IDictionary<string, object> htmlAttributes) 
{ 
    var builder = new StringBuilder(); 

    foreach (var value in values) 
    { 
     //Create a unique id based on the radio button value 
     if (!htmlAttributes.ContainsKey("id")) 
      htmlAttributes.Add("id", string.Format("{0}_{1}", htmlHelper.IdFor(expression), value.ToString())); 

     builder.Append(htmlHelper.RadioButtonFor(expression, value, htmlAttributes)); 
    } 

    return new MvcHtmlString(builder.ToString()); 
} 

然後,你可以在你的視圖中使用這個擴展:

<div class="vote"> 
    @Html.RadioButtonListFor(x => x.Vote, new[] {1, 2, 3}, new { @class = "rdbn" }) 
</div> 
0

而是通過ID去的,你可以只使用jQuery通過價值發現個別單選按鈕:

$("#idOfRadioButton").find(":radio[value=1]") 
+1

+1反擊downvote。當解決方案如此簡單時(或者手動編寫html並自己設置ID而不是使用幫助器),無需過分複雜化。 – hawkke

+1

這完全破壞了這一點。在表單上具有相同的ID是無效的HTML。 – Liam

相關問題