Html.RadioButton устанавливает все значения на выбранное значение - PullRequest
1 голос
/ 10 ноября 2008

Поработав над решением [этой] [1] проблемы, я думаю, что суть проблемы заключается в следующем:

Когда вы используете html-помощник Html.RadioButton () с полем 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>

Ответы [ 3 ]

4 голосов
/ 11 ноября 2008

Это связано с ошибкой в ​​бета-коде ASP.NET MVC. Я написал полное объяснение проблемы на форуме asp.net MVC. Ссылка на эту ссылку

1 голос
/ 12 ноября 2008

На случай, если кому-то все равно, это очень быстрая и грязная работа в ожидании следующего обновления фреймворка. Он только regex заменяет значение на ваше значение. Это не проверено модулем, не гарантировано.

Поместите его в свою библиотеку классов 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;
    }
    

Я знаю, что это можно сделать лучше и так далее, но я действительно надеюсь, что это все равно скоро исправят. Если вам хочется улучшить его, это вики сообщества, так что продолжайте

0 голосов
/ 10 ноября 2008

Одна вещь, чтобы проверить. Используете ли вы обновленную модель для визуализации своего представления? То есть те же данные модели, которые были обновлены из сообщения, переданного представлению во второй раз, когда оно отображается?

...