0

私の行動の1つで、私はこれを持っています:

ViewBag.Val = "a val";
View();

関連するビュー:

@{
  Model.Attr = ViewBag.Val;
}

例外の詳細:

System.NullReferenceException: Object reference not set to an instance of an object.

...

Line 27: Model.Attr = ViewBag.Val;

値をビューに渡し、モデル属性をその値に設定する方法である場合、これは問題を引き起こしている実際の行ですか。

編集:

実行をログに記録しました。割り当ては正常に機能します。

アクションを取得:

var Obj = MyModel();
Obj.Attr = 123;
return View(Obj);

見る:

<p>@Model.Attr</p> // shows 123

しかし、MyModel を受け取るポスト アクションでは、MyModel.Atrr は 0 です。

なぜこれが起こっているのか、そしてそれを修正する方法。

編集 2

ビューがバインドされているモデルは、ポスト アクションで処理されると予想されるモデルであり、ビューまたは前の (取得) アクションで値を割り当てたいモデルです。「get action」から値「a」をビューに渡し、「model.a」=「a」を割り当ててから、「post action」で「モデル」(「a」が付加されたもの) を処理したいだけです。 .

ログからわかることは、ビューにバインドされたモデルと、「アクションの取得」からビューに渡すモデルが異なるインスタンスであることです。

4

3 に答える 3

1

オブジェクトをビューに渡さなかったため、 null であるため、プロパティModelに書き込もうとするとスローされました。Attr

ここに何かを渡します:

ViewBag.Val = "a val";
View(new SomeModelTypeYadaYadaThatCorrespondsToTheView());

Michal Klouda のコメントも正しいです。あなたのやり方は間違っています。設定する必要がある値は、ビューのレンダリング中ではなく、モデルの構築時に行う必要があります。

于 2012-09-07T17:49:35.320 に答える
0

アクション メソッドでビューを返し、モデルを渡す必要があります。

ViewBag.Val = "a val";
return View(YourModel);
于 2012-09-07T18:51:17.967 に答える
0

これを .cshtml ファイルに追加できると思います (持っていないと思います)。

    @model YourModelNameSpace.YourModel

これにより、null ではない厳密に型指定されたモデルが得られます。

于 2012-09-07T18:42:42.837 に答える