2012-01-18 8 views
1

TryUpdateModelを使用してnull値のbool値を更新する際に問題が発生しています。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)%> 
<% } %> 

マイビューは次のようになります:SQL Serverデータベースの種類もNULL可能ビットとして正しく定義されている

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

私はそうような値を処理するために作成したテンプレートを持っています。

マイコードは単純です:

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

    } 

エラーがそのフィールド上にModelStateのために報告されている:「値 『nullが』 TestFieldには有効ではありません。」

これはかなり簡単ですが、これで何も見つかりませんでした。どんな助けでも大歓迎です。

乾杯、

ブライアン

+0

のようなフォームのコレクションを使用して)(「そう」ロードするためにSomeObjectのを持っていましたヌル。私が、それぞれのブール値で「はい」または「いいえ」を選択すると、すべて正常に動作します。それは私に悲しみを与えるヌル値です。 – Bman

答えて

1

誰も私の質問に答えなかったので、私は私の回避策をお付けいたします。スーパーエレガントではありませんが、機能します。もし私がそれがきれいだったら、それはピンク色のフォントになります。 ;)

は基本的に私は手動で私は値を「更新」にしようとしていますことを、私は追加する必要があります推測するので...

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; 
}