2014-10-07 3 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; } 

изменил мой взгляд с флажком на 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

Model.questionnaires [ItemIndex] = верно Отвечать на. Я думаю, что вам не хватает ==. – Mukund

+0

да, я забыл добавить другое = так как im просто печатает вне редактора кода, я уже изменил его на bool.parse..will обновит свой код за какое-то время – anonymous1110

ответ

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), который отобразит выпадающий список с тремя значениями (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

Я не могу понять, мне нужно отправить ответ, моя проблема заключается в том, что он теперь сохраняет значение null во всем, несмотря на то, что ответ «да» или нет. – anonymous1110

+0

. Вы не передаете какие-либо входы с вопросниками «name =» [0]. «Ответ», поэтому ничего не отправляется обратно в свойство «Ответ», поэтому, конечно, его ноль. Имя ваших входов должно соответствовать имени вашего свойства (в этом случае, потому что у вас есть коллекция, она также должна включать индекс) –

+0

hi stephen я изменил свой флажок на radiobutton сейчас, см. Мой отредактированный код. теперь мой вопрос заключается в том, как передать нулевое значение, если оно неприменимо? спасибо – anonymous1110

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

, сначала это был radiobutton, но позже мне пришлось его менять, так как некоторые вопросы не применимы. вот почему мой ответ обнуляется, чтобы справиться с этим. – anonymous1110

+0

@ anonymous1110: Попробуйте обработать нулевые запросы после обратной передачи в контроллере. – Saket

+0

@Saket, Как вы можете обрабатывать нуль? Значение равно либо true, либо false. В обратной передаче ничего не будет, чтобы указать значение «null»! –

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

Может ли этот дескриптор, если пользователь не хочет отвечать? Мне нужно передать его как nullable, если не применимо – anonymous1110

+0

Вы можете установить 2 флажка для «Да» и «Нет», но для выполнения этой функции вам понадобится 2 свойства в модели. Если пользователь не указал «да» или «нет», существует опция «nullable». –

+0

@ anonymous1110 Сделайте 'bool Option1' как nullable' Nullable Option1' и удалите строку '@ Html.ValidationMessageFor (model => model.Option1)' из бритвы. –

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

да это сработало для меня тоже –

Смежные вопросы