2017-03-01 8 views
-1

私のアプリがクラッシュする理由を理解できません。ViewBagプロパティにアクセスしようとするとアプリケーションが終了する

public ActionResult AttachmentsPartial(Guid processId) 
{ 
    var staff = GetCurrentStaff(); 
    var process = Db.Processes.Include(nameof(Stages)).FirstOrDefault(p => p.Id == processId); 

    if (process != null && staff != null) 
    { 
     var stages = process.Stages.ToList(); 
     ViewBag.Stages = stages; 
     var files = new List<AttachmentViewModel<Guid>>(); 

     foreach (var stage in stages) 
     { 
      //***Some code*** 
      files.AddRange(items); 
     } 

     return PartialView("_AttachmentsPartial", files); 
    } 

    return PartialView("_AttachmentsPartial"); 
} 

そして、私の意見:これは、コントローラで自分の行動である

@model List<AttachmentViewModel<Guid>> 

@using PM.Models; 
@using PM.Resources.Strings; 
@using PM.Utils; 

@{ 
    List<Stages> stages = ViewBag.Stages; // This crashes here 
} 

以前、それはStackOverflowExceptionでクラッシュしたが、それだけでアプリを終了し、今は何も出力しません。
このコードをデバッグしようとしましたが、ViewBag.Stagesへのアクセスを試みるとクラッシュします。デバッガでのみ作成しようとしても。

+1

あなたはそれをキャストする必要があります('をViewBag'は動的である)ことを確認してください'コントローラはそれを' if'ブロックにセットするだけです。 –

+0

@StephenMuecke、それはキャスティングを必要とせず、 'null'の場合、このコードは' stages'を 'null'に等しくする必要があります。アプリケーションをクラッシュさせません。しかし、コントローラでチェックしたので、「null」ではありません。 –

+1

Global.asaxのApplication_Error()でエラーをキャッチしようとしましたか? –

答えて

1

これは、部分トレースなどの読み込み時にエラーを見つけるためによく使用する関数です。 Global.asax.csで

作成:

protected void Application_Error() 
{ 
    Exception exception = Server.GetLastError(); 

    Response.Clear(); 
    Server.ClearError(); 

    HttpException ex = exception as HttpException; 

    var test = ex.GetHttpCode(); 
} 

を私は例外にブレークポイントを入れて、それをスローした場合、それの上に置きます。それは通常何が間違っているか私に伝えます。

1

リストに配列を割り当てようとしていますか?一覧リスト として 段=のViewBag.Stages ``、あなたがnull `をテストする必要があるだろう -

List<Stages> stages = ViewBag.Stages; 

Stages[] stages = ViewBag.Stages; 
+0

いいえ)古いソースをコピーしました。ちょうど私はそれを配列に切り替えることを試みたが、それでも動作しなかった。 –

+0

私はソースを修正しました。 –

関連する問題