MVC Checkbox值无法正常工作

时间:2014-10-07 06:48:22

标签: asp.net-mvc razor checkbox

嗨我有一个复选框,我正在制作一个清单程序,它的类型是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"}) 

我现在的问题是如何在不适用时传递空值?

5 个答案:

答案 0 :(得分: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个值的下拉列表(真/假/未设置),或者你可以使用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(选中);