我正在开始我的第一个ASP.NET MVC项目,所以我有一个简单的问题.我有以下代码:
foreach(var question in Model.GeneralQuestions)
{
<div class = "well">
<h3>
<strong>@question.QuestionString</strong>
</h3>
@foreach (var answer in question.PossibleAnswers)
{
@Html.RadioButtonFor(model => question.QuestionString, answer.Answer)
@Html.Label(answer.Answer)
<br />
}
</div>
}
Run Code Online (Sandbox Code Playgroud)
Model.GeneralQuestions中的所有问题都是唯一的,因此单选按钮应按名称属性分组(对于每个问题,一组单选按钮).但是这段代码只生成一个组,所以当我回答第二个问题时,首先会取消选择.我需要改变什么?
编辑
我的模型看起来像:
public class StudentViewModel
{
public Student Student { get; set; }
public List<Question> GeneralQuestions { get; set; }
public List<SubjectQuestions> SubjectQuestions { get; set; }
}
public class Student
{
public int StudentID { get; set; }
public string Index { get; set; }
public string Name …Run Code Online (Sandbox Code Playgroud) 根据我的研究,在MVC中编码复选框的正确方法如下.
@Html.CheckBoxFor(m => m.RememberMe)
@Html.LabelFor(m => m.RememberMe)
Run Code Online (Sandbox Code Playgroud)
这将呈现一个复选框,为复选框呈现标签,并使标签可单击,这意味着单击标签也会切换复选框.
但是对于单个视图模型字段有多个复选框的情况呢?(例如,也许每个复选框代表一个整数值内的位.)或者,更好的是,单选按钮怎么样,哪里总有几个选项与同一个字段相关联?
在这些情况下,上面的代码似乎存在问题.要么不是所有元素都与相同的字段相关联,要么呈现具有相同ID的多个元素.
我一直在研究这个问题.我找到了很多解决方案; 然而,它们似乎都没有可点击的标签,或者它们需要一堆自定义和/或非标准编码.有些人完全避免使用RadioButtonFor/LabelFor,而是选择编写原始HTML.
编写原始HTML很好,但是MVC的设计者没有预料到我们可能需要为同一个字段使用多个单选按钮吗?而且,如果他们这样做了,他们是如何打算编码的呢?
编辑:
在研究了这个之后,下面的代码是我发现编码单选按钮的最佳方法.这段代码假设我为每个无线电选项定义了一个枚举.
@Html.RadioButtonFor(m => m.Gender, Gender.Male, new { id = "gender-male" })
@Html.LabelFor(m => m.Gender, Gender.Male.ToString(), new { @for = "gender-male" })
@Html.RadioButtonFor(m => m.Gender, Gender.Female, new { id = "gender-female" })
@Html.LabelFor(m => m.Gender, Gender.Female.ToString(), new { @for = "gender-female" })
Run Code Online (Sandbox Code Playgroud)
也许这是我能想到的最好的,但它仍然让我感到麻烦.
为什么要对ID这样的基本内容进行如此多的定制?再一次,微软是否预计我们需要与同一领域相关联的多个单选按钮?
如果枚举名称与单选按钮标签所需的描述不同,则此方法似乎不支持字段属性,例如[Display(Name = "")].
(我想多个复选框的正确处理将推迟到另一个问题.)
我正在使用MVC,我在foreach中有一些RadioButton:
foreach (var item in group) {
<tr>
<td>
@Html.RadioButtonFor(modelItem => item.CheckerApproved, true)
@Html.RadioButtonFor(modelItem => item.CheckerApproved, false)
</td>
</tr>
}
Run Code Online (Sandbox Code Playgroud)
因此,对于组中的每个项目,都应该有一个真假的单选按钮.
问题是当组中有多个项目时,您最终可能会遇到两个项目:
<tr>
<td>
<input id="item_CheckerApproved" type="radio" value="True" name="item.CheckerApproved">
<input id="item_CheckerApproved" type="radio" value="False" name="item.CheckerApproved
checked="checked">
</td>
</tr>
<tr>
<td>
<input id="item_CheckerApproved" type="radio" value="True" name="item.CheckerApproved">
<input id="item_CheckerApproved" type="radio" value="False" name="item.CheckerApproved
checked="checked">
</td>
</tr>
Run Code Online (Sandbox Code Playgroud)
我想要的是这些radiobuttons团体是分开的.因此,更改第一行中的值不会影响第二行中的值.但是,如果您在顶行设置了say,则在第二行中选择任一值,取消第一行中的true.
我相信这是因为它们是由name属性链接的.但是,您实际上无法手动重置此名称属性.
有谁知道我怎么能让它工作,所以每一行的真假互相交互,但对radiobuttons其他行没有影响?
该复选框未显示在页面中。我在google上尝试了很多解决方案。什么都没起作用。这是代码:
@model project.gamestatus
@using (Html.BeginForm("Create", "Calculator", FormMethod.Post, new { id = "frmID" }))
{
//other codes
<div class="form-group">
@Html.Label("Show on Screen", htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.CheckBoxFor(m => m.display_status)
@Html.ValidationMessageFor(model => model.display_status, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Create" class="btn btn-info" />
</div>
</div>
}
Run Code Online (Sandbox Code Playgroud)
仅当该复选框显示在页面中时,我才能继续进行验证。在我看来没有复选框