2016-04-12 7 views
0

私はヘルパークラスにtry-catchセグメントを持っています。 try catchセグメントがエラーをスローした場合、ビューを返すようにします。今、私が持っている:
1.(再)ヘルパーで例外をスロー+コントローラに例外処理を追加したり、
:2つの方法がありますMvcのヘルパークラスからビューを返す5

try 
{ 

} 
catch (System.Exception) 
{ 
    return RedirectToAction("Index", "Home"); 
} 
+2

ここでは正確に何を求めていますか? –

+0

私はビューを返そうとしています〜/ Views/Home/Index.cshtml 私はヘルパークラスでコントローラではないので、 戻るビュー( "〜/ Views/Home/Index.cshtml");は動作しません –

+0

例外をコントローラーに戻して、それを処理してリダイレクトすることができますか? – Draken

答えて

2

try 
{ 
    //some code 
} 
catch (Exception ex) 
{ 
    return View("~/Views/Home/Index.cshtml"); 
} 
+0

問題は、ユーザーがインデックスビュー内のボタンをクリックしたときに例外が発生する可能性があることです。私はおそらく部分的なビューを使用してこれを解決することができますが、私はしたくないです。ヘルパークラスからコントローラを呼び出す方法はありますか?(プロジェクトは既にスパゲティコードなので、ベストプラクティスである必要はありません) –

+0

私はあなたのメソッドを使う方法を見つけたと思います。私はそれを試してみましょう:) –

+0

働いたような魅力:) –

0

はこれを試してみてください2.ヘルパーで例外をキャッチします。例:return成功/失敗を通知するブール+コントローラーのこの値に応答します。

第一のアプローチ:

MyController.cs

public ActionResult Index() 
{ 
    try 
    { 
     MyHelper.SomeMethod(); // This method is allowed to throw 
     return View(); // No view name specified means this renders "Index" 
    } 
    catch (Exception ex) 
    { 
     return View("Error"); 
    } 
} 

第二のアプローチ:

MyController.cs

public ActionResult Index() 
{ 
    bool succeeded = MyHelper.SomeFunction(); // This method should never throw 
    if (succeeded) 
     return View(); // No view name specified means this renders "Index" 
    else 
     return View("Error"); 
} 

また、ビューがすべての結果を処理できない限り、ビューでヘルパーを呼び出すことは避けてください。ビューがすでに実行されている場合、単に別のビューに切り替えることはできません。これは、タスクとコントローラーの責任です。

+0

アクションへのリダイレクトが現在のコンテキストに存在しないというメッセージが表示されます。おそらく、私はコントローラーではなくヘルパークラスに入っているからでしょう。 –

+0

コントローラからキャッチしてリダイレクトする必要があります。 – Remay

+0

私はこの事例でそれをすることを敢えてしません。私はSystem.Xmlを使用しています。 およびSystem.ServiceModel.Syndication ;.私が新しいプロジェクトを開始したとき、VSは正しいバージョンのsystem.xmlを見つけるのに問題があったので、今私はコードのその部分に触れることを敢えてしません。おそらくあまりにも妄想です:) –

関連する問題