嗨我有一个复选框,我正在制作一个清单程序,它的类型是bool?如果答案不适用我可以传递空值(他们应该留下是和否空白),否则他们应该勾选是或否。我现在的问题是如何将答案保存到我的答案属性。< / p>
查看:
YES
@Html.CheckBox("chkYes", Model.questionnaires[itemindex].Answer.HasValue ? bool.Parse(Model.questionnaires[itemindex].Answer.ToString()):false)
NO
@Html.CheckBox("chkNo", Model.questionnaires[itemindex].Answer.HasValue ? !bool.Parse(Model.questionnaires[itemindex].Answer.ToString()) : false)
型号:
public bool? Answer { get; set; }
将我的视图从复选框更改为radiobutton:
YES
@Html.RadioButtonFor(modelItem => modelItem.questionnaires[itemindex].Answer,true, new { id = "rbYes"})
NO
@Html.RadioButtonFor(modelItem => modelItem.questionnaires[itemindex].Answer,false, new { id = "rbNo"})
Not Applicable
@Html.RadioButtonFor(modelItem => modelItem.questionnaires[itemindex].Answer,null, new { id = "rbNotApp"})
我现在的问题是如何在不适用时传递空值?
答案 0 :(得分:1)
您的2个复选框(以及相关的隐藏输入)将呈现为
<input type="checkbox" name="chkYes" ...>
<input type="hidden" name="chkYes" ...>
<input type="checkbox" name="chkNo" ...>
<input type="hidden" name="chkNo" ...>
将回发到名为chkYes
和chkNo
的属性(不存在),但您的属性名称为Answer
。你可以使用@Html.EditorFor(m => m.questionnaires[itemindex].Answer)
来显示3个值的下拉列表(真/假/未设置),或者你可以使用3个单选按钮来指示状态。
另请注意,您不能将checkbox
用于nullable bool
。复选框仅有2个状态(checked = true或unchecked = false),而nullable bool
有3个状态(true,false和null)。此外,如果未选中
如果使用单选按钮,则
YES
@Html.RadioButtonFor(modelItem => modelItem.questionnaires[itemindex].Answer, true, new { id = "rbYes"})
NO
@Html.RadioButtonFor(modelItem => modelItem.questionnaires[itemindex].Answer, false, new { id = "rbNo"})
Not Applicable
@Html.RadioButtonFor(modelItem => modelItem.questionnaires[itemindex].Answer, string.Empty, Model.questionnaires[itemindex].Answer.HasValue ? (object)new { id = "rbNotApp" } : (object)new { id = "rbNotApp", @checked = "checked" })
答案 1 :(得分:1)
是的,HTML是用两个相同属性的输入呈现的,比如#Stephen Muecke在他的回答中说。由于两个输入都具有相同的名称,因此表单帖子不会占用任何一个。我没有找到隐藏的输入非常有用所以我在页面加载时使用JS删除它,如下所示。
@Html.CheckBoxFor(model => model.IsRFD, new { @class = "checkbox" })
@Html.LabelFor(model => model.IsRFD)
JS:
$('input[name="IsRFD"][type="hidden"').remove();
到目前为止它完美无缺地工作......
答案 2 :(得分:0)
我不明白一件事。如果答案只是“是”或“否”,为什么要使用复选框?单选按钮不应用于此目的吗?您可以采用更简单的方式实现:
@Html.RadioButtonFor(m=>m.Answer , new{ Name="Answer"}) Yes
@Html.RadioButtonFor(m=>m.Answer , new{ Name="Answer"}) No
如果您仍想使用您的方法,您可以直接将其绑定到我认为的模型:
YES @Html.CheckBoxFor(m=>m.Answer)
NO @Html.CheckBoxFor(m=>m.Answer)
将模型字段设为:
public bool Answer { get; set; }
回发后处理控制器中的空请求。
答案 3 :(得分:0)
Why doesn't my checkbox map to an MVC model member?
这里有一个示例,说明如何将复选框映射到mvc模型。复选框是无用的,但总有一种解决方法。
型号:
namespace TestAppMVC2.Models
{
public class MyModel
{
public bool Option1 { get; set; }
}
}
查看:
<fieldset>
<legend>Fields</legend>
<div class="editor-label">
@Html.LabelFor(model => model.Option1)
</div>
<div class="editor-field">
@Html.CheckBoxFor(model => model.Option1)
@Html.ValidationMessageFor(model => model.Option1)
</div>
<p>
<input type="submit" value="Save" />
</p>
</fieldset>
答案 4 :(得分:0)
在MVC中,我们无法更改模型值,因为MVC会生成复选框的隐藏输入,但是我们可以通过jquery获取值并更改模型。
在此示例中:
@ Html.CheckBoxFor(model => model.Option1)
在js中使用它(在onchange事件或您需要的任何东西中):
var checked = $(“#Option1”)。is(':checked'); $(“#Option1”)。val(选中);