gpt4 book ai didi

asp.net-mvc - 使用 HtmlHelper 类时,MVC 单选按钮列表未分组

转载 作者:行者123 更新时间:2023-12-04 10:21:14 26 4
gpt4 key购买 nike

在创建组合在一起的单选按钮列表时遇到问题,特别是在 MVC 3 中,但这也适用于 MVC 2。

当使用 Html 帮助程序生成单选按钮并且模型是数组的一部分时,就会出现问题。

这是我的代码的简化版本。

public class CollectionOfStuff {
public MVCModel[] Things { get; set }
}

/*This model is larger and represents a Person*/
public class MVCModel {

[UIHint("Hidden")]
public string Id { get; set; }

public string Name { get; set; }

public bool IsSelected { get; set; }
}

/*Assigned to new CollectionOfStuff property Things*/
var items = new[] {
new MVCModel() { Id="0" Name = "Name here" }, new MVCModel() { Id="1" Name = "Name there" }
}

我的父 View
@model CollectionOfStuff

@for (int i = 0; i < Model.Things.Length; i++) {
@Html.EditorFor(m => m.Things[i]);
}

我的 View 呈现单个 MVCModel 对象
@Model MVCModel

@{
var attr = new {
Checked = Model.IsSelected ? "checked=checked" : ""
};
}

@Html.RadioButtonFor(model => model, Model.Id, attr)

产生这个输出:
<input type="radio" value="0" name="MVCModel[0]" id="MVCModel_0_" data-val-required="You need to choose" data-val="true" />
<input type="radio" value="1" name="MVCModel[1]" id="MVCModel_1_" data-val-required="You need to choose" data-val="true" />

单选按钮没有分组,但是它具有写出元数据进行验证的明显优势。

另一种方式是调用:
@Html.RadioButton(name: "GroupName", value: Model.Id, isChecked: Model.IsSelected)     

产生:
<input type="radio" value="0" name="MVCModel[0].GroupName" id="MVCModel_0__GroupName">
<input type="radio" value="1" name="MVCModel[1].GroupName" id="MVCModel_1__GroupName">

同样,这不会产生预期的结果。它还缺少验证元数据。

另一种选择是创建自定义模板,但这种方法的问题是验证所需的所有元数据都不存在。

关于如何创建分组单选按钮或获取元数据以便我可以自己创建模板的任何想法?

最佳答案

您还没有展示您的 View 模型的外观,但您可以按某些属性对它们进行分组。让我们举个例子:

public class MyViewModel
{
[Required]
public string SomeProperty { get; set; }
}

Controller :
public class HomeController : Controller
{
public ActionResult Index()
{
return View(new MyViewModel());
}

[HttpPost]
public ActionResult Index(MyViewModel model)
{
return View(model);
}
}

看法:
@model AppName.Models.MyViewModel
@using (Html.BeginForm())
{
<div>A: @Html.RadioButtonFor(x => x.SomeProperty, "a")</div>
<div>B: @Html.RadioButtonFor(x => x.SomeProperty, "b")</div>
@Html.ValidationMessageFor(x => x.SomeProperty)
<input type="submit" value="OK" />
}

现在,如果您想预选某个 radio ,只需将 View 模型的属性设置为 radio 的相应值,而不是在您的 View 中编写一些难看的 C# 代码:
public ActionResult Index()
{
var model = new MyViewModel
{
SomeProperty = "a" // select the first radio
};
return View(model);
}

显然,这种技术适用于任何简单的属性类型(不仅是字符串)以及可以与该属性关联的任意数量的单选按钮。

关于asp.net-mvc - 使用 HtmlHelper 类时,MVC 单选按钮列表未分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5289489/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com