私はヘルパークラスにtry-catchセグメントを持っています。 try catchセグメントがエラーをスローした場合、ビューを返すようにします。今、私が持っている:
1.(再)ヘルパーで例外をスロー+コントローラに例外処理を追加したり、
:2つの方法がありますMvcのヘルパークラスからビューを返す5
try
{
}
catch (System.Exception)
{
return RedirectToAction("Index", "Home");
}
私はヘルパークラスにtry-catchセグメントを持っています。 try catchセグメントがエラーをスローした場合、ビューを返すようにします。今、私が持っている:
1.(再)ヘルパーで例外をスロー+コントローラに例外処理を追加したり、
:2つの方法がありますMvcのヘルパークラスからビューを返す5
try
{
}
catch (System.Exception)
{
return RedirectToAction("Index", "Home");
}
:
try
{
//some code
}
catch (Exception ex)
{
return View("~/Views/Home/Index.cshtml");
}
問題は、ユーザーがインデックスビュー内のボタンをクリックしたときに例外が発生する可能性があることです。私はおそらく部分的なビューを使用してこれを解決することができますが、私はしたくないです。ヘルパークラスからコントローラを呼び出す方法はありますか?(プロジェクトは既にスパゲティコードなので、ベストプラクティスである必要はありません) –
私はあなたのメソッドを使う方法を見つけたと思います。私はそれを試してみましょう:) –
働いたような魅力:) –
はこれを試してみてください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");
}
また、ビューがすべての結果を処理できない限り、ビューでヘルパーを呼び出すことは避けてください。ビューがすでに実行されている場合、単に別のビューに切り替えることはできません。これは、タスクとコントローラーの責任です。
アクションへのリダイレクトが現在のコンテキストに存在しないというメッセージが表示されます。おそらく、私はコントローラーではなくヘルパークラスに入っているからでしょう。 –
コントローラからキャッチしてリダイレクトする必要があります。 – Remay
私はこの事例でそれをすることを敢えてしません。私はSystem.Xmlを使用しています。 およびSystem.ServiceModel.Syndication ;.私が新しいプロジェクトを開始したとき、VSは正しいバージョンのsystem.xmlを見つけるのに問題があったので、今私はコードのその部分に触れることを敢えてしません。おそらくあまりにも妄想です:) –
ここでは正確に何を求めていますか? –
私はビューを返そうとしています〜/ Views/Home/Index.cshtml 私はヘルパークラスでコントローラではないので、 戻るビュー( "〜/ Views/Home/Index.cshtml");は動作しません –
例外をコントローラーに戻して、それを処理してリダイレクトすることができますか? – Draken