在修补问题后,我认为问题的核心是:
当您使用带有Enum作为值字段的Html.RadioButton()html助手时,您只能选择一次选项。在重新发布页面后,帮助程序将忽略调用中设置的值,并将所有单选按钮设置为相同的值,即您在上一篇文章中选择的值。 我做错了吗?
示例(观看按钮的值)
<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>
答案 0 :(得分:4)
这是由于ASP.NET MVC Beta代码中的一个错误。我在asp.net MVC论坛上写了这个问题的完整解释。请参阅此link
答案 1 :(得分:1)
如果有人关心这是一个真正快速而肮脏的工作,期待下一次更新框架。它只能用您的值重新替换值。 它不是经过单元测试的,不能保证不是。
将它放在HtmlHelper类库中或放置HtmlHelper扩展名的任何位置。 添加以下用法:
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;
}
我知道它可以做得更好而且还有什么,但我真的希望它能尽快解决。 如果你想让它变得更好,那就是社区维基,那么继续吧
答案 2 :(得分:0)
要检查的一件事。您是否使用更新的模型来渲染视图?即是第二次显示时传递给视图的帖子更新的相同模型数据?