2014-10-07 85 views
1

嗨,我有一个复选框,我正在做一个清单程序,它的类型是bool?所以我可以通过一个空值,如果答案不适用(他们应该保留是和不是空白),否则他们应该勾选是或否..我现在的问题是我如何保存我的答案属性的答案。MVC复选框值不起作用

查看:

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; } 

改变从复选框我以单选按钮:现在

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

Model.questionnaires [项目索引]。答=真。我认为你缺少==。 – Mukund 2014-10-07 06:58:49

+0

是的,我忘了添加另一个=因为我只是在代码编辑器外面打字,我已经将其更改为bool.parse..will更新我的代码在一段时间 – anonymous1110 2014-10-07 07:05:58

回答

1

您2复选框(以及相关的隐藏输入)将呈现为

<input type="checkbox" name="chkYes" ...> 
<input type="hidden" name="chkYes" ...> 
<input type="checkbox" name="chkNo" ...> 
<input type="hidden" name="chkNo" ...> 

将回发到名为chkYeschkNo属性(不存在),但你的属性名称Answer。您可以使用@Html.EditorFor(m => m.questionnaires[itemindex].Answer)这将显示一个带有3个值的下拉列表(True/False/Not Set),或者您可以使用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" }) 
+0

我似乎无法理解,我需要发回答案,我的问题是,它现在保存为空,尽管答案是是或不是 – anonymous1110 2014-10-07 07:08:21

+0

您不是使用'name =“调查问卷[0] .Answer”'呈现任何输入“,所以没有任何内容会回传给属性'Answer'空值。你输入的名称必须与你的财产的名称相匹配(在这种情况下,因为你有一个集合,它也必须包含索引器) – 2014-10-07 07:14:14

+0

hi stephen我把我的复选框改为radiobutton,请看我编辑的代码。我现在的问题是如何通过一个空值,如果不适用?谢谢 – anonymous1110 2014-10-07 07:44:37

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; } 

手柄在回发后控制器空请求..

+0

首先它是单选按钮,但后来我不得不改变它,因为有些问题不适用。这就是为什么我的答案是可以处理的。 – anonymous1110 2014-10-07 07:10:49

+0

@ anonymous1110:尝试在控制器中回发后处理空请求。 – Saket 2014-10-07 07:15:07

+0

@Saket,你如何处理null?该值可以是“true”或“false”。回发中没有任何内容表示'null'值! – 2014-10-07 07:26:47

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> 
+0

如果用户不想回答,可以处理这个句柄吗?如果不适用,我需要将其作为可空条件来传递 – anonymous1110 2014-10-07 07:15:35

+0

您可以将2个复选框分别设置为是和否,但在模型中需要2个属性才能完成此功能。如果用户没有选择“是”或“否”,那么您的选项是空的。 – 2014-10-07 08:02:35

+0

@ anonymous1110将'bool Option1'设为可为空[可空] Option1'并从剃刀中删除'@ Html.ValidationMessageFor(model => model.Option1)'行。 – 2014-10-07 08:10:03

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(); 

现在,它是完全符合到目前为止没有问题的工作...

+0

是的,它也适用于我 – 2017-04-16 12:32:07