2016-04-22 6 views
1

私のスクリプトで私のビューモデルをRazorから使用しようとしています。 問題は時々、循環値を持つEFによって生成された私の複雑なモデルがnullであることです。JavaScriptでヌルC#モデルを使用

var skill = @Model.Skill1 != null ? "@Model.Skill1.SkillName" : ""; 

@ Model.Skill1がnullでない場合、@ Model.Skill1.SkillNameを使用できます。しかし、@ Model.Skill1がnullの場合、結果は

Object reference not set to an instance of an object. 

です。ページはレンダリングされません。

プロパティSkillNameにアクセスする条件がトリガされない場合でも、@ Model.Skill1.SkillNameはコードに書き込めないようです。

私は私のオブジェクトをJsonオブジェクトに変換しようとしましたが、今回私は問題を生成する循環値を持っています。

問題を回避する方法や方法はありますか?

+0

うまくいきましたが、文字列を '' @ Model.Skill1.SkillName "'に設定します。これは '' SkillName'の値ではありません。 'Model'がnullではないと確信していますか? – Rob

+0

はい、私はかなり確信しています、モデルは決してヌルですがスキルの子供は時々です。そして、私は "@ Model.Skill1.SkillName"を知っていますが、もしそうでなければ、次のようなエラーがあります。 var test = C++;定義されていません C++は私の価値です。 – Fchabert

答えて

6

言語を混在させています。これはあなたのJavaScriptブロック内にある場合:

var skill = @Model.Skill1 != null ? "@Model.Skill1.SkillName" : ""; 

あなたはそこサーバー側のステートメントを持っています。それらを実行するかどうかを決定するロジックがない。両方とも実行され、2番目はNullReferenceExceptionです。

は基本的に、あなたは クライアントにnull参照を放出しようとしていると、それがnullかどうそう クライアントを確認することができます。しかしそれまでには逆参照しようとしていたので、エラーです。

行動はnullチェックサーバー側とは、単にクライアント側のコードに結果を発します。このような何か:

var skill = '@(Model.Skill1 != null ? Model.Skill1.SkillName : "")'; 

カミソリ@()における括弧内の値は発光式ラッピング全体文は、サーバー側のコードであり、単一の放出された値をもたらすはずであることを意味します。

+0

良い答えです。けれどもヌルであれば=> var skill = '""' ...あなたはアラート(スキル)をしようとすると画面に ""表示されます! ,,だから私はそれがこのような周囲の単一引用符なしでなければならないと思うvarスキル= @(Model.Skill1!= null?Model.Skill1.SkillName: ""); –

+0

@AKhudairy:文字列値を出力するときに、引用符は印刷されません。引用符は実際には*文字列の一部ではなく、*文字列を示す*言語構文です。クライアント側引用符を省略すると、構文エラーが発生します。 – David

+0

コンソールでこれを試してください.. var xxx = '""';アラート(xxx); ....あなたがスクリーン上で何を得るか教えてください! ...これを試してみてください... var xxx = '';アラート(xxx);あなたは今何を得ましたか? ....多分私のコードは間違っています。MVCのかみそりエンジンが正しく理解できるかどうかはわかりません。 –

関連する問題