2017-03-29 6 views
-1

中にnullポインタエラーの原因となっている私は、ページのモデルの一部ではない情報を表示するためのViewDataを使用。フォームには厳密に型指定されたモデルが含まれ、顧客情報はフォームの最上部に表示されます。フォームを送信する前に情報が表示されるので、nullではないことがわかります。フォームの一部ではないため、フォームを送信するときにエラーが発生するのはなぜですか?のViewDataは、Entity Frameworkの</p> <p>とASP.NET MVCを使用してPOST

コードエラーに

@model Sondage_Epicier.Models.Sondage_Vendeur 

@{ 
Sondage_Epicier.Models.CLIENT cust = (Sondage_Epicier.Models.CLIENT) 
ViewData["Customer"]; 
} 

<div id="sondage"> 

<div class="subForm" style="margin-bottom: -20px;"> 
    <p class="info">@Resources.numClient2 @cust.NO_CLIENT</p><br /> 
    <p class="info">@Resources.nom @cust.NOM</p><br /> 
    <p class="info">@Resources.address @cust.ADR_1 , @cust.VILLE</p> 
</div> 
@using (Html.BeginForm()) 
{ 
@Html.ValidationSummary(true, "", new { @class = "" }) 
@Html.HiddenFor(model => model.SondageID) 
@Html.HiddenFor(model => model.Date_Envoye) 
@Html.AntiForgeryToken() 

stack trace

を引き起こし、私は@custはあなたが取得している問題ではありません@Resources

+0

ViewDataの代わりに[ViewModel](http://stackoverflow.com/questions/11064316/what-is-viewmodel-in-mvc)を使用して、問題を解決しました。多くはViewDataをがアンチパターンで、おそらくあなたのフォームが検証に合格しない場合は、ページをリロードします今までとにかく – Liam

+0

を使用すべきではないと思います。 ViewData要素をリセットしない場合は、あなたの言ったようにフォームの一部ではないため、NULLになります。あなたはPRGを次(ポスト、リダイレクト、取得)し、単にあなたのPOSTメソッドからの戻りビュー(「myviewname」)を呼び出していない場合は、値を再設定しない限り、また、再び、のViewDataはNULLになります。 – Tommy

+0

ViewDataを再読み込みする必要があります。成功した操作(DB内のデータの保存/更新)で、このhttp://stackoverflow.com/a/43083773/40521 – Shyju

答えて

0

を引き起こしている明確にすることが、フランス語でSQLスタックについて謝罪custオブジェクトはNULLなのでエラーです。 オブジェクト参照がオブジェクトのインスタンスに設定されていませんエラー

custオブジェクトがNULLになるのはなぜですか?NULLオブジェクトのプロパティにアクセスしようとしています。変数custの値は、ViewData["Customer"]と変わります。 ViewData["Customer"]が有効なCLIENTインスタンスに設定されていないとどうなりますか?フォームを送信するときにエラーが発生しているとお伝えしました。これは通常、フォームを送信するときに発生し、httpポストアクションメソッドでは、ViewData/ViewBag辞書項目を再ロードせずに同じビューに戻ります。

だから、解決策は、それを使用しているビューに戻る前のViewData辞書に顧客オブジェクトをリロードすることです。

[HttpPost] 
public ActionResult Save(SomeViewModel model) 
{ 
    //your existing code 
    // here i am creating a new object and assigning it. 
// Replace with your code which you use in the GET action 
    var customer = new Sondage_Epicier.Models.CLIENT(); 
    ViewData["Customer"] =customer; 
    return View(); 
} 

覚えておいてください、HTTPはステートレスです。

+0

を参照してください、あなたはPRGパターンに従うことをGETアクションにリダイレクトする必要があります。ここhttp://stackoverflow.com/questions/11209191/how-do-i-include-a-model-with-a-redirecttoaction/11209320#11209320サンプルを参照してください。 – Shyju

関連する問題