2012-01-18 4 views
1

У меня возникла проблема с обновлением значения переменной bool с использованием метода TryUpdateModel. У меня есть шаблон, созданный для обработки значения, так:Linq MVC 2 TryUpdateModel nullable bool

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<System.Boolean?>" %> 


<% if (ViewData.ModelMetadata.IsNullableValueType) { %> 
    <%= Html.DropDownListFor(model => model, new SelectListItem[] { new SelectListItem() { Text = "", Value = "null"},new SelectListItem() { Text = "Yes", Value = "true"}, new SelectListItem() { Text = "No", Value = "false" }})%> 
<% } else { %> 
    <%= Html.CheckBoxFor(model => model.Value)%> 
<% } %> 

My View выглядит следующим образом:

<%=Html.EditorFor(model => model.TestField) %> //which looks/acts correctly 

Типы баз данных SQL Server также определена правильно, как обнуляемое бит.

Мой код прямо вперед: сообщил

var so = new SomeObject(); 
    if (ModelState.IsValid) 
    { 
     //gets to here 
     if (TryUpdateModel(so)) 
     { 
      //never gets here 
     } 

    } 

Ошибка для ModelState на этом поле: «Значение„нуль“не является допустимым для TestField.»

Это кажется довольно прямым, но я ничего не смог найти. Любая помощь будет принята с благодарностью.

Приветствия,

Brian

+0

Я предполагаю, что я должен добавить, что я пытаюсь «обновить» значение для Ноль. Если я выберу «да» или «нет» с соответствующими значениями bool, все будет работать нормально. Это нулевое значение дает мне горе. – Bman

ответ

1

Поскольку никто не ответил на мой вопрос, я кладу обходной путь вверх. Это не супер элегантный, но он работает. Если бы я хотел, чтобы это было красиво, это было бы в розовом шрифте. ;)

В основном я должен был загрузить «так» (SomeObject) вручную, используя форму Collection, как так ...

var so = new SomeObject(); 
if (ModelState.IsValid) 
{ 

    so.WasItFound = StringToNullBool(form["WasItFound"]); 
    so.WhereWasItFound = form["WhereWasItFound"]; 

    //fill in the rest of the properties using the form Collection... 


} 



private bool? StringToNullBool(string s) 
{ 
    if (s != "null") 
     return Convert.ToBoolean(s); 
    else 
     return null; 
} 
Смежные вопросы