我有一个radiobuttonlist为自定义适配器工作,但如果用户表单数据被重置,并且之前没有提交任何数据,其中一个单选按钮(第一个)总是被预选,我想避免这种情况,我该如何实现?
@Html.RadioButtonForSelectList(model => model.ViewModelForThingCreate.ThingTypeID, Model.ViewModelForCarCreate.CarTypeSelectList)
Run Code Online (Sandbox Code Playgroud)
和:
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());
}
Run Code Online (Sandbox Code Playgroud)
谢谢!
我刚刚在 mvc3 模板中尝试了你的方法,它似乎对我来说工作得很好。基本上我已经创建了一些模型
public class IndexModel
{
public string ID;
public IEnumerable<SelectListItem> Elements;
}
Run Code Online (Sandbox Code Playgroud)
然后创建实例并填充值:
var model = new IndexModel()
{
ID = "a",
Elements =
new List<SelectListItem>() {
new SelectListItem() { Text = "test1", Value = "1"},
new SelectListItem() { Text = "test2", Value = "2"}}
};
Run Code Online (Sandbox Code Playgroud)
鉴于我已经使用了你的扩展方法
<form>
@(Extensions.RadioButtonForSelectList(Html, x => x.ID, Model.Elements))
<button type="reset">Reset</button>
</form>
Run Code Online (Sandbox Code Playgroud)
启动后一切看起来都很好。加载时不会选择字段,并且在按“重置”按钮后会清除字段。

您能否提供更多详细信息,因为我不确定我是否完全理解您想要实现的目标:-)
编辑:
下面是单选按钮的纯 HTML 示例。它们一开始肯定没有填写,如果您希望需要它们,请添加必填项,但默认情况下,您可以发送表单而无需选择任何单选按钮。您也可以通过添加检查来进行检查,如第二个示例所示。你在客户端使用一些javascript吗?也许它导致了这种副作用? http://jsbin.com/isadun/1
米兹
| 归档时间: |
|
| 查看次数: |
1833 次 |
| 最近记录: |