Html.RadioButtonはすべての値を選択された値に設定します
-
07-07-2019 - |
質問
[this] [1]の問題を解決するためにいじくり回した後、問題の核心は次のようになると思います:
EnumフィールドとしてHtml.RadioButton()htmlヘルパーを使用する場合、オプションは1回しか選択できません。ページを再ポストした後、ヘルパーは呼び出しで設定された値を無視し、すべてのラジオボタンを同じ値に設定します。これは、前のポストバックで選択した値です。 私は何か間違っていますか?
例(ボタンの値を見る)
<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>
2回目の生成:
<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>
解決
これは、ASP.NET MVCベータコードのバグが原因です。私はasp.net MVCフォーラムで問題の完全な説明を書きました。このリンク
を参照してください。他のヒント
ここで誰かが気にしている場合、フレームワークの次の更新を見越して、本当に迅速で汚い回避策です。値を自分の値に置き換えるだけです。 単体テストではなく、何でも保証されません。
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; }
もっと良くできるとは思いますが、とにかくすぐに修正されることを願っています。 あなたがそれを改善したいと思うなら、それはコミュニティウィキですので、先に進んでください
確認することが1つあります。更新されたモデルを使用してビューをレンダリングしていますか?つまり表示から2回目に表示に渡された投稿から更新されたのと同じモデルデータですか?
所属していません StackOverflow