2008-11-10 98 views
1

所有值擺弄周圍解決後[這裏] [1]的問題,我認爲,問題的核心是:Html.RadioButton設置爲選擇的值

當您使用Html.RadioButton()HTML將Enum作爲值字段的助手,您只能選擇一次您的選項。重新發布頁面後,助手將忽略呼叫中設置的值,並將所有單選按鈕設置爲相同的值,即您選擇上一個帖子後的值。 我做錯了什麼?

例(看值的按鈕

<fieldset> 
    <legend>Test</legend>        
    <div> 
     <label for="SearchBag.EffectIndicatorAny" id="EffectIndicatorAnyLabel"> 
      Any 
     </label>     
     <%=Html.RadioButton("SearchBag.EffectIndicator", "Any" , ViewData.Model.SearchBag.EffectIndicatorIsAny, new { @id = "SearchBag.EffectIndicatorAny" })%> 
    </div> 
    <div> 
     <label for="SearchBag.EffectIndicatorSolid" id="EffectIndicatorSolidLabel"> 
      Solid 
     </label>     
     <%=Html.RadioButton("SearchBag.EffectIndicator", "Solid", ViewData.Model.SearchBag.EffectIndicatorIsSolid, new { @id = "SearchBag.EffectIndicatorSolid" })%> 
    </div> 
    <div> 
     <label for="SearchBag.EffectIndicatorEffect" id="EffectIndicatorEffectLabel"> 
      Effect 
     </label>     
     <%=Html.RadioButton("SearchBag.EffectIndicator", "Effect", ViewData.Model.SearchBag.EffectIndicatorIsEffect, new { @id = "SearchBag.EffectIndicatorEffect" })%> 
    </div> 
</fieldset> 

會產生

<fieldset> 
    <legend>Effect</legend>        
    <div class="horizontalRadio"> 
     <label for="SearchBag.EffectIndicatorAny" id="EffectIndicatorAnyLabel"> 
      Any          
     </label>     
     <input checked="checked" id="SearchBag.EffectIndicatorAny" name="SearchBag.EffectIndicator" type="radio" value="Any" /> 
    </div> 
    <div class="horizontalRadio"> 
     <label for="SearchBag.EffectIndicatorSolid" id="EffectIndicatorSolidLabel"> 
      Solid 
     </label>     
     <input id="SearchBag.EffectIndicatorSolid" name="SearchBag.EffectIndicator" type="radio" value="Solid" /> 
    </div> 
    <div class="horizontalRadio"> 
     <label for="SearchBag.EffectIndicatorEffect" id="EffectIndicatorEffectLabel"> 
      Effect 
     </label>     
     <input id="SearchBag.EffectIndicatorEffect" name="SearchBag.EffectIndicator" type="radio" value="Effect" /> 
    </div> 
</fieldset> 

而且會產生第二次:

<fieldset> 
    <legend>Effect</legend>        
    <div class="horizontalRadio"> 
     <label for="SearchBag.EffectIndicatorAny" id="EffectIndicatorAnyLabel"> 
      Any          
     </label>     
     <input id="SearchBag.EffectIndicatorAny" name="SearchBag.EffectIndicator" type="radio" value="Solid" /> 
    </div> 
    <div class="horizontalRadio"> 
     <label for="SearchBag.EffectIndicatorSolid" id="EffectIndicatorSolidLabel"> 
      Solid 
     </label>     
     <input checked="checked" id="SearchBag.EffectIndicatorSolid" name="SearchBag.EffectIndicator" type="radio" value="Solid" /> 
    </div> 
    <div class="horizontalRadio"> 
     <label for="SearchBag.EffectIndicatorEffect" id="EffectIndicatorEffectLabel"> 
      Effect 
     </label>     
     <input id="SearchBag.EffectIndicatorEffect" name="SearchBag.EffectIndicator" type="radio" value="Solid" /> 
    </div> 
</fieldset> 

回答

4

這是由於ASP.NET MVC Beta代碼中的一個錯誤。我在asp.net MVC論壇上寫了關於這個問題的完整解釋。參考這link

+0

謝謝。我將檢查是否可以製作一個覆蓋該框架的HTML幫助器方法。這樣,我仍然可以將我的網站部署到常規測試版部署的環境中。 – 2008-11-12 07:57:13

0

一件事檢查。您是否使用更新後的模型呈現視圖?即是在第二次顯示時傳遞給視圖的帖子中更新的相同模型數據?

+0

感謝您的回答。新的通過(它適用於我所有的其他領域)。雖然我不明白這與我的問題有何關係。我會編輯我的帖子,使其更加清晰。 – 2008-11-10 11:37:44

1

如果有人在乎這裏是一個真正的快速和骯髒的工作,預計下一次更新的框架。它只會將價值與您的價值相提並論。 這不是單元測試,不保證沒有。

把它放在你的HtmlHelper類庫或任何你把HtmlHelper擴展的地方。 添加以下用法:

  • System.Text.RegularExpressions;
  • System.Web.Mvc.Html;

    /*ToDo: remove when patched in framework*/ 
    public static string MonkeyPatchedRadio(this HtmlHelper htmlHelper, string name, object value, bool isChecked, object htmlAttributes){ 
        string monkeyString = htmlHelper.RadioButton(name, value, isChecked, htmlAttributes); 
        monkeyString = Regex.Replace(monkeyString, "(?<=value=\").*(?=\".*)", value.ToString());    
        return monkeyString; 
    } 
    

我知道這是可以做到更好,諸如此類的東西,但我真的希望它很快就會反正是固定的。 如果您覺得自己做得更好,那就是社區維基,所以繼續