首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ASP.NET MVC RadioButtonListFor始终是预设的

ASP.NET MVC RadioButtonListFor始终是预设的
EN

Stack Overflow用户
提问于 2013-02-16 11:17:39
回答 3查看 1.9K关注 0票数 6

我有一个正在工作的radiobuttonlistFor自定义适配器,但是如果用户表单数据被重置,并且以前没有提交过数据,那么其中一个单选按钮(第一个)总是被预先选择的,我想要避免这种情况,我该如何实现呢?

代码语言:javascript
运行
复制
@Html.RadioButtonForSelectList(model => model.ViewModelForThingCreate.ThingTypeID, Model.ViewModelForCarCreate.CarTypeSelectList)

和:

代码语言:javascript
运行
复制
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());
        }

谢谢!

EN

Stack Overflow用户

回答已采纳

发布于 2013-02-28 07:04:34

我刚刚在mvc3模板中尝试了你的方法,它看起来对我来说很好。基本上我已经创建了一些模型

代码语言:javascript
运行
复制
 public class IndexModel
 {
     public string ID;
     public IEnumerable<SelectListItem> Elements;
 }

然后创建实例并填充值:

代码语言:javascript
运行
复制
var model = new IndexModel()
            {
                ID = "a",
                Elements = 
                       new List<SelectListItem>() { 
                                                    new SelectListItem() { Text = "test1", Value = "1"},
                                                    new SelectListItem() { Text = "test2", Value = "2"}}
            };

鉴于我已经使用了你的扩展方法

代码语言:javascript
运行
复制
<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

票数 1
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14906541

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档