获取 ASP MVC 3 中单选按钮值的列表

2024-03-30

我正在开发一个用于评级问题的页面。

在视图中,我有一个问题列表,每个问题前面有 5 个单选按钮。

<input name="evalId" type="hidden" value="@Model.Evaluation.EvalId" />
foreach (var question in questionList)
{
     <input name="questionId" type="hidden" value="@question.QuestionId" />
     <div class="row_star" style="border-bottom : 0 none; background: none;">
       @if (!String.IsNullOrEmpty(question.QuestionTitre))
       {
         <p>@question.QuestionTitre.TrimEnd()</p>
       }

       @* here goes the code for 5 radio buttons*@
}

现在,在我的控制器中,我希望能够知道每个问题检查了哪个单选按钮。

我怎样才能做到这一点 ?

这是我的视图模型

public class EvaluationViewModel
{
    /// <summary>
    /// 
    /// </summary>
    public EvalEvaluation Evaluation
    {
        get;
        set;
    }

    /// <summary>
    /// 
    /// </summary>
    public Dictionary<EvalQuizz, List<EvalQuestion>> EvalQuizzQuestionList
    {
        get;
        set;
    }
}

假设你的 ViewModel 是这样的

public class Question
{
    public int ID { set; get; }
    public string QuestionText { set; get; }
    public List<Answer> Answers { set; get; }
    public int SelectedAnswer { set; get; }
    public Question()
    {
        Answers = new List<Answer>();
    }
}
public class Answer
{
    public int ID { set; get; }
    public string AnswerText { set; get; }
}
public class Evaluation
{
    public List<Question> Questions { set; get; }
    public Evaluation()
    {
        Questions = new List<Question>();
    }
}

在 GET 操作方法中,您将把视图模型返回到视图,并填写一些问题和答案。在下面的代码中,我对问题和答案进行了硬编码。您可以从存储库/服务层获取它。

public ActionResult Index()
{
    var evalVM = new Evaluation();

    //the below is hardcoded for DEMO. you may get the data from some  
    //other place and set the questions and answers

    var q1=new Question { ID=1, QuestionText="What is your favourite language"};
    q1.Answers.Add(new Answer{ ID=12, AnswerText="PHP"});
    q1.Answers.Add(new Answer{ ID=13, AnswerText="ASP.NET"});
    q1.Answers.Add(new Answer { ID = 14, AnswerText = "Java" });
    evalVM.Questions.Add(q1);

    var q2=new Question { ID=2, QuestionText="What is your favourite DB"};
    q2.Answers.Add(new Answer{ ID=16, AnswerText="SQL Server"});
    q2.Answers.Add(new Answer{ ID=17, AnswerText="MySQL"});
    q2.Answers.Add(new Answer { ID=18, AnswerText = "Oracle" });
    evalVM.Questions.Add(q2);

    return View(evalVM);
}

Now we will create an Editor Template to render our Question. so go to your View Folder and create a folder called EditorTemplates under the folder with your current controller name. Add a view to the EditorTemplates folder and give the same name as the class name we want to represent. ie : Question.cshtml enter image description here

现在将此代码放入编辑器模板中

@model YourNameSpace.Question
<div>
    @Html.HiddenFor(x=>x.ID)
    @Model.QuestionText
    @foreach (var a in Model.Answers)
    {
        <p>
        @Html.RadioButtonFor(b=>b.SelectedAnswer,a.ID)  @a.AnswerText 
        </p>
    }
</div>

现在转到我们的主视图并使用 EditorTemplate html 帮助器方法将我们创建的 EditorTemplate 带到主视图。

@model YourNameSpace.Evaluation
<h2>Index</h2>
@using (Html.BeginForm())
{
    @Html.EditorFor(x=>x.Questions)
    <input type="submit" />
}

现在,在 HttpPost 中,您可以检查发布的模型并获取所选单选按钮 (SelectedAnswer) 的值

[HttpPost]
public ActionResult Index(Evaluation model)
{
    if (ModelState.IsValid)
    {
        foreach (var q in model.Questions)
        {
            var qId = q.ID;
            var selectedAnswer = q.SelectedAnswer;
            //Save

        }
        return RedirectToAction("ThankYou"); //PRG Pattern
    }
    //reload questions
    return View(model);
}

If you use visual studio breakpoints, you can see the values posted. Thanks to MVC Model binding :) enter image description here

您可以阅读相关内容并下载工作示例here http://www.techiesweb.net/radio-button-list-in-asp-net-mvc.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

获取 ASP MVC 3 中单选按钮值的列表 的相关文章

  • ASP.Net MVC:如何在 CSS 文件中使用 razor 变量

    根据我的场景 我需要存储这个路径 img 产品 pngrazor 变量中的图像 后来我想在 CSS 文件中使用该 razor 变量 下面的css代码在css文件中 test background url img product png no
  • Orchard 中最近博客文章的自定义视图

    我已经搜索并尝试了 2 天来更改主页上显示的 RecentBlogPosts 内容类型的视图 我想显示帖子的标题和短语 我设法找到一个显示每个帖子标题的视图 但我还没有弄清楚模型中其他部分的名称或如何提取文本 非常感谢您的帮助 using
  • 从另一名 Razor 助手中调用另一名 Razor 助手

    我需要创建 Razor 助手的第二个重载 并希望从另一个助手调用一个助手 使用一些特定参数 有没有办法实现呢 Sure using System Web Mvc using System Web Mvc Html public static
  • 在 MVC 中处理错误、异常和 404 的最佳路由方法是什么?

    SO 和网络上有很多文章试图优雅地处理 404 和异常 从我读过的内容来看 最好的建议似乎是为 404 设置一条路线 如下所示 routes MapRoute 404 PageNotFound url new controller Erro
  • 持久身份验证令牌过期

    我有一个使用表单身份验证的 ASP NET MVC 应用程序 这是我创建身份验证令牌的代码行 FormsAuthentication SetAuthCookie username true 我的 web config 包含
  • 如何将 JRadioButton 组与模型一起使用

    有没有什么方法可以将一组 JRadioButtons 与数据模型关联起来 以便更容易判断选择了哪个按钮 如果有 在理想的世界中 我想将一组 N 个单选按钮与一个enum类有一个NONEvalue 和与每个单选按钮关联的一个值 我解决了我自己
  • Ajax.BeginForm 可以重定向到新页面并传递路由值

    此链接显示如何重定向 Ajax BeginForm 但不显示如何将路由值传递到新视图 可以重定向到新页面的 Ajax BeginForm https stackoverflow com questions 9391201 ajax begi
  • 每 4 个循环新表行

    如何在 Razor 视图中每 4 个循环创建一个新表行 这是为 4 之前的每个数字创建一个新行 然后停止创建新行 int i 0 foreach var item in ViewBag ProgramIdList if i 4 0 tr t
  • index.g.cshtml 在哪里

    我正在尝试完成本教程 但是 通常 当我构建解决方案时 我会得到一个CS0234错误指出文件中缺少命名空间Index g cshtml cd 但是这个文件存在于哪里呢 我努力了 所有构建 清理 重建解决方案选项 我已重新启动 Visual S
  • 具有实体框架的 MVC 控制器的 T4 模板 - 主机的成员属性 (MvcTextTemplateHost)?

    有谁有我可以在 MVC 3 附带的 T4 模板 ControllerWithContext tt 中使用的 Host 对象成员的完整引用吗 我已经尝试了我能想到的所有谷歌搜索 但唯一相关的结果是这个页面 http blogs msdn co
  • RegisterGlobalFilters 的目的是什么?

    在 MVC3 中 我以这种方式启用了 CustomErrors
  • Visual Studio 智能感知搞砸了

    所以我是 MVC4 和 C 的新手 我已经设计这个网站大约两周了 智能感知没有任何问题 两天来 Visual studio 告诉我 Viewbag 和其他 命令不是我的项目的一部分 我可能错过了一些东西 或者它告诉我 Viewbag 在当前
  • 是否可以从 Razor/Blazor 组件获取原始 HTML?

    我想使用 MailKit 设置 邮件 新闻通讯 我的网站堆栈基于 Blazor Web 程序集并使用 Razor 组件 我想知道是否有一种方法可以使用我编写的剃刀组件 将 HTML 输出到我用来生成电子邮件正文的 MimeMessage 对
  • JQuery Mobile 与 MVC 的链接

    我正在使用 ASP NET MVC 3 和 Razor UI 设置 JQuery 移动网站 我正在生成我的链接 例如 a href See Group 2 a 假设我从 Home Index 访问它 我遇到的问题是 当我点击链接时 它会出现
  • 将多个表映射到实体框架中的单个实体类

    我正在开发一个旧数据库 该数据库有 2 个具有 1 1 关系的表 目前 我为每个定义的表定义了一种类型 1Test 1Result 我想将这些特定的表合并到一个类中 当前的类型如下所示 public class Result public
  • 挂钩 jQuery 验证消息更改

    我想在工具提示中显示 jQuery 验证消息 为了实现这一目标 我首先将以下 CSS 规则添加到我的样式表中 fieldset field validation error display none fieldset field valid
  • 混合 ASP.NET WebForms 和 MVC 授权

    我正在尝试将一些 MVC3 功能混合到现有的 WebForms 应用程序中 我遵循了一些指南 除了授权部分之外 一切都已设置完毕并正常工作 现有的应用程序有
  • MVC3 Ajax.ActionLink

    对于以下情况 Ajax ActionLink Delete Delete AdminGroup new id item AdminGroupId new AjaxOptions Confirm Delete HttpMethod Delet
  • 在 CSHTML 页面中实现 switch 语句

    我正在尝试做一些不同的事情 我有一个包含 ID 的视图 根据 Id 的值 我想更改显示的标题 就像是 switch id case test h1 Test Site h1 case prod h1 Prod Site h1 break 我
  • MVC 在布局代码之前执行视图代码并破坏我的脚本顺序

    我正在尝试将所有 javascript 包含内容移至页面底部 我正在将 MVC 与 Razor 一起使用 我编写了一个辅助方法来注册脚本 它按注册顺序保留脚本 并排除重复的内容 Html RegisterScript scripts som

随机推荐