我有一个正在工作的radiobuttonlistFor自定义适配器,但是如果用户表单数据被重置,并且以前没有提交过数据,那么其中一个单选按钮(第一个)总是被预先选择的,我想要避免这种情况,我该如何实现呢?
@Html.RadioButtonForSelectList(model => model.ViewModelForThingCreate.ThingTypeID, Model.ViewModelForCarCreate.CarTypeSelectList)和:
public static MvcHtmlString RadioButtonForSelectList<TModel, TProperty>(this HtmlHelper<TModel> HTMLHelper,Expression<Func<TModel, TProperty>> Expression, IEnumerable<SelectListItem> ListOfValues)
{
var MetaData = ModelMetadata.FromLambdaExpression(Expression, HTMLHelper.ViewData);
var SB = new StringBuilder();
if (ListOfValues != null)
{
foreach (SelectListItem Item in ListOfValues)
{
var ID = string.Format("{0}_{1}", MetaData.PropertyName, Item.Value);
var Radio = HTMLHelper.RadioButtonFor(Expression, Item.Value, new { id = ID }).ToHtmlString();
SB.AppendFormat("<label class=\"radio inline\" for=\"{0}\">{1} {2}</label>", ID, Radio, HttpUtility.HtmlEncode(Item.Text));
}
}
return MvcHtmlString.Create(SB.ToString());
}谢谢!
发布于 2013-02-28 07:04:34
我刚刚在mvc3模板中尝试了你的方法,它看起来对我来说很好。基本上我已经创建了一些模型
public class IndexModel
{
public string ID;
public IEnumerable<SelectListItem> Elements;
}然后创建实例并填充值:
var model = new IndexModel()
{
ID = "a",
Elements =
new List<SelectListItem>() {
new SelectListItem() { Text = "test1", Value = "1"},
new SelectListItem() { Text = "test2", Value = "2"}}
};鉴于我已经使用了你的扩展方法
<form>
@(Extensions.RadioButtonForSelectList(Html, x => x.ID, Model.Elements))
<button type="reset">Reset</button>
</form>在发布后,一切似乎都很好。字段在加载时不会被选中,并且在按下“重置”按钮后会被清除。

您能否提供更多细节,因为我不确定我是否完全理解您试图实现的目标:-)
编辑:
下面是单选按钮的普通HTML示例。它们在开始时肯定没有填写,如果你想让它们是必需的,添加 required ,但默认情况下,你可以发送表单而不选择任何单选按钮。你也可以像第二个例子一样,通过添加checked来选中一个。你在客户端使用了什么javascript吗?也许是它引起了这种副作用??http://jsbin.com/isadun/1
mz
发布于 2013-02-16 11:36:42
这是按钮设置为未选中的自定义帮助器。尝试此操作,我假设它将呈现所有未选中的单选按钮。
public static MvcHtmlString RadioButtonForSelectList<TModel, TProperty>(this HtmlHelper<TModel> HTMLHelper,Expression<Func<TModel, TProperty>> Expression, IEnumerable<SelectListItem> ListOfValues)
{
var MetaData = ModelMetadata.FromLambdaExpression(Expression, HTMLHelper.ViewData);
var SB = new StringBuilder();
if (ListOfValues != null)
{
foreach (SelectListItem Item in ListOfValues)
{
var ID = string.Format("{0}_{1}", MetaData.PropertyName, Item.Value);
var Radio = HTMLHelper.RadioButtonFor(Expression, Item.Value, new { id = ID }).ToHtmlString();
SB.AppendFormat("<label class=\"radio inline\" checked="false" for=\"{0}\">{1} {2}</label>", ID, Radio, HttpUtility.HtmlEncode(Item.Text));
}
}
return MvcHtmlString.Create(SB.ToString());
}发布于 2013-02-27 04:38:49
不幸的是,必须始终选中一个单选按钮。这就是单选按钮的不幸之处;但是,您总是可以在窗体中添加一个隐藏的单选按钮,并将checked属性设置为true;如果没有从中选择任何内容,则让内部代码接受null或任何您期望的值。
尝试将所有单选按钮值设置为未选中或false
foreach(button in ButtonGroup){
button.checked = false;
}https://stackoverflow.com/questions/14906541
复制相似问题