Linq MVC 2 TryUpdateModel nullable bool - PullRequest
       25

Linq MVC 2 TryUpdateModel nullable bool

1 голос
/ 18 января 2012

У меня возникла проблема с обновлением обнуляемого значения bool с использованием TryUpdateModel.У меня есть шаблон, созданный для обработки значений следующим образом:

<%@ 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)%>
<% } %>

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

<%=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.»

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

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

Брайан

1 Ответ

1 голос
/ 01 февраля 2012

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

В основном мне пришлось загружать "so" (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;
 }
...