2015-02-04 2 views
0

У меня есть следующие модели:Checkbox проверяется, но модель все еще ложь

public class TaskViewModel{ 
    //other properties are omitted for brevity 
    public bool IsUnderControl{get;set;} 
    } 

С другой стороны, у меня есть эти два DOM элементы, которые я вручную связывающиеся свойства модели:

<input type="checkbox" name="IsUnderControl" value="true"/> 
<input type="hidden" name="IsUnderControl" value="false" /> 

Теперь, после отправки, значение IsUnderControl неверно, даже если флажок установлен. Вот метод POST:

[HttpPost] 
public void SaveTask(TaskViewModel tvm){ 
    //When I debug the code I see that tvm.IsUnderControl=false 
    if (ModelState.IsValid){ 
    //I save the task to repository 
    } 
} 

* Примечание: Когда я проверить флажок Я вижу, что нет никакого checked="checked" среди элементов CheckBox atributes.

EDIT: Вот Javascript, с которым я создать соответствующий элемент ввода:

$('#taskConfig'). 
    append('<input type="checkbox" value="true" 
    name="IsUnderControl"/>').append('<input type="hidden" value="false"  
    name="IsUnderControl"/>'); 
+0

Вы пытались использовать HTML-помощник вместо этого? '@ Html.CheckBoxFor (m => m.IsUnderControl)' –

+0

Является ли это 'public bool IsUnderControl {get; задавать; } '? И какова подпись метода POST? –

+0

Я думаю, что вы не связываете свойство модели с флажком. Попробуйте использовать Html.Checkbox или Html.CheckboxFor. – Dhwani

ответ

0

Прежде всего, я хочу поблагодарить @Stephen Muecke за его помощь. Его предложения помогли мне отказаться от возможных ошибок, и я наконец нашел, где моя ошибка. Я использую Entity Framework, и я не нашел лучшего способа связать свойство bool с столбцом в базе данных Oracle, чем другое свойство, называемое, например, IsUnderControlInt, и преобразование в это свойство или из этого свойства в boolean в методах getters и seters. Как например:

[Column("ISUNDERCONTROL")] 
public int IsUnderControlInt {get;set;} 
[NotMapped] 
public bool IsUnderControl 
{ 
    get {return Convert.ToBoolean(IsUnderControlInt);} 
    set IsUnderControlInt=Convert.ToInt32(value);//This is correct 
} 

У меня была ошибка в инкубаторе: Вместо преобразования переданную value в Int32, я преобразования себя, как это:

set IsUnderControlInt=Convert.ToInt32(IsunderControl);This is incorrect 

Вот почему он никогда не был установлен истинный , Теперь он отлично работает. Спасибо вам всем.