ASP.NET MVC RadioButtonListFor始终是预设的

Bac*_*tnz 6 asp.net-mvc

我有一个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)

谢谢!

mar*_*ski 1

我刚刚在 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

米兹