2017-03-01 5 views
0

以下に示すように、VBでコレクションを逆シリアル化しようとしていました。隠し入力 "空文字列" vs "null" Javascript、VB

Dim items = JsonConvert.DeserializeAnonymousType(Page.Request.Params("Items"), New List(Of ItemDto)) 

デシリアライズに問題がありました。文字列 "value"はnullにできませんでした。

System.Web.HttpUnhandledException (0x80004005): Exception of type 'System.Web.HttpUnhandledException' was thrown. ---> System.ArgumentNullException: Value cannot be null. 
Parameter name: value 
at Newtonsoft.Json.JsonConvert.DeserializeObject(String value, Type type, JsonSerializerSettings settings) 
at Newtonsoft.Json.JsonConvert.DeserializeObject[T](String value, JsonSerializerSettings settings) 

コレクション「のアイテムは、」私は$("#Items').val(null);をしなかった場合はそこにはアイテムがありませんし、それが正常に働いている場合しかし、それが実行される前に<input type="hidden"....>

に変換され<asp:HiddenField runat="server" ClientIDMode="Static" ID="Items" />に保存しました。

私が$("#Items").val(null);を行った後に、なぜ、$("#Items").val();が ""と ""と表示されているのでしょうか?目に見えない違いがありますか?ゼロ幅のスペースのような?

なぜコレクションを「null」に設定するとコードが機能するのか分かりません。

ありがとうございました。

+1

これは設計によるようです。 [** jquery .val Documentation **](http://api.jquery.com/val/)を見ると、 'String or Number or Array'が返されるだけで、Nullは次のように返されます。空の文字列 – Nope

+0

これは、nullが空の文字列として出てくる理由を説明しますが、nullに設定する前に以前に空の文字列として出てきたときに逆直列化が失敗するのはなぜですか? – MerlynCooper

+1

シリアル化はサーバ側で行われていませんか?ブラウザのデバッガコンソール(ChromeのF12)を開くと、[ネットワーク]タブが表示され、ヘッダーにサーバーに送信された値が表示されます。そうすれば、あなたは2の違いを知ることができます。 – Nope

答えて

1
$("#Items").val(); 

NULLので、空の文字列が返され返さないとあなたが

$("#Items').val(null); 

を行うときに、それが「」または空の文字列とnullでない値を設定しない

ので、次の例外はしません

System.Web.HttpUnhandledException' was thrown. ---> System.ArgumentNullException: Value cannot be null. 

あなたのJQueryでは値が ""に設定されていてNULLではないのでASP.NET例外

関連する問題