这个把我难倒了,我有一个强类型的视图,它有这个循环来生成单选按钮:

<% foreach (QuestionAnswer qa in Model.QuestionAnswers)
   { %>
    <%= Html.RadioButtonFor(model => model.QuestionAnswers[(int)qa.QuestionID - 1].AnswerValue, "Checked" ) %>
    <%= Html.Encode(qa.OptionValue) %>
<% } %>

它的渲染效果很好,但由于名称不同,因此可以 Select 多个radiobutton.我如何对它们进行分组,以便只能 Select 一个单选按钮?

如有任何帮助,我们将不胜感激!

推荐答案

Html的第一个参数.RadioButtonOn()应该是您正在使用的属性名,第二个参数应该是特定单选按钮的值.然后,它们将具有相同的名称属性值,当/如果与属性值匹配时,助手将 Select 给定的单选按钮.

Example:

<div class="editor-field">
    <%= Html.RadioButtonFor(m => m.Gender, "M" ) %> Male
    <%= Html.RadioButtonFor(m => m.Gender, "F" ) %> Female
</div>

Here's a more specific example:

我做了一个名为"DeleteMeQuestion"的快速MVC项目(DeleteMe前缀,这样我知道我可以在忘记它之后删除它).

我做了以下模型:

namespace DeleteMeQuestion.Models
{
    public class QuizModel
    {
        public int ParentQuestionId { get; set; }
        public int QuestionId { get; set; }
        public string QuestionDisplayText { get; set; }
        public List<Response> Responses { get; set; }

        [Range(1,999, ErrorMessage = "Please choose a response.")]
        public int SelectedResponse { get; set; }
    }

    public class Response
    {
        public int ResponseId { get; set; }
        public int ChildQuestionId { get; set; }
        public string ResponseDisplayText { get; set; }
    }
}

模型中有一个简单的范围验证器,只是为了好玩.接下来,我制作了以下控制器:

namespace DeleteMeQuestion.Controllers
{
    [HandleError]
    public class HomeController : Controller
    {
        public ActionResult Index(int? id)
        {
            // TODO: get question to show based on method parameter 
            var model = GetModel(id);
            return View(model);
        }

        [HttpPost]
        public ActionResult Index(int? id, QuizModel model)
        {
            if (!ModelState.IsValid)
            {
                var freshModel = GetModel(id);
                return View(freshModel);
            }

            // TODO: save selected answer in database
            // TODO: get next question based on selected answer (hard coded to 999 for now)

            var nextQuestionId = 999;
            return RedirectToAction("Index", "Home", new {id = nextQuestionId});
        }

        private QuizModel GetModel(int? questionId)
        {
            // just a stub, in lieu of a database

            var model = new QuizModel
            {
                QuestionDisplayText = questionId.HasValue ? "And so on..." : "What is your favorite color?",
                QuestionId = 1,
                Responses = new List<Response>
                                                {
                                                    new Response
                                                        {
                                                            ChildQuestionId = 2,
                                                            ResponseId = 1,
                                                            ResponseDisplayText = "Red"
                                                        },
                                                    new Response
                                                        {
                                                            ChildQuestionId = 3,
                                                            ResponseId = 2,
                                                            ResponseDisplayText = "Blue"
                                                        },
                                                    new Response
                                                        {
                                                            ChildQuestionId = 4,
                                                            ResponseId = 3,
                                                            ResponseDisplayText = "Green"
                                                        },
                                                }
            };

            return model;
        }
    }
}

最后,我利用该模型提出了以下观点:

<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<DeleteMeQuestion.Models.QuizModel>" %>

<asp:Content ContentPlaceHolderID="TitleContent" runat="server">
    Home Page
</asp:Content>

<asp:Content ContentPlaceHolderID="MainContent" runat="server">

    <% using (Html.BeginForm()) { %>

        <div>

            <h1><%: Model.QuestionDisplayText %></h1>

            <div>
            <ul>
            <% foreach (var item in Model.Responses) { %>
                <li>
                    <%= Html.RadioButtonFor(m => m.SelectedResponse, item.ResponseId, new {id="Response" + item.ResponseId}) %>
                    <label for="Response<%: item.ResponseId %>"><%: item.ResponseDisplayText %></label>
                </li>
            <% } %>
            </ul>

            <%= Html.ValidationMessageFor(m => m.SelectedResponse) %>

        </div>

        <input type="submit" value="Submit" />

    <% } %>

</asp:Content>

根据我对你的理解,你的问题有一系列的答案.每个答案都将指示下一个问题.从我的模型和待办事项 comments 中,希望这是有意义的.

这将为您提供具有相同名称属性但不同ID属性的单选按钮.

Asp.net相关问答推荐

ASP.NET多行查询文本框中的多个名称并将结果添加到单个网格视图

AJAX返回未定义、失败

是否可以发布 ASP.NET 5 应用程序以使目标机器不需要安装 DNX?

您如何处理多个环境的多个 web.config 文件?

如何以编程方式设置单元格 colored颜色 epplus?

无法连接到 ASP.Net 开发服务器问题

SignalR 不在服务器上使用 Session

ASP.NET Web 应用程序 (.NET Framework) 与 ASP.NET Core Web 应用程序 (.NET Framework) 之间的差异

更新到 ASP.NET Core 2.0 - 包与 netcoreapp2.0 不兼容

控制器 SessionStateBehavior 是只读的,我可以更新会话变量

使用 IIS 的 ASP.NET 调试超时

对布尔查询字符串参数使用true或1

发布发布事件

最佳服务器端 .NET PDF 编辑库

使用 LINQ 进行递归控制搜索

根据 DropDownList 的值动态启用或禁用RequiredFieldValidator

Request.Cookies 和 Response.Cookies 之间的区别

好的 ASP.NET 类似 excel 的网格控件?

如何使用 ConfigurationManager.AppSettings

通过 CultureInfo 格式化字符串