2017-01-11 8 views
-1

Razorを使用してビューからアクションへリダイレクトしようとしています。 ページの読み込み中にエラーが発生することがあります。MVCクリックしないでRazorを使用してビューからアクションへリダイレクト

私はtryとcatchブロックをリダイレクトしました。

ビュー:

@{ 
    var x = Session["Username"]; 

    try 
    { 
     if (x.ToString().Equals(item.User.UserName)) 
     { 
      <td> 
       @Html.ActionLink("تعديل", "Edit", new { id = item.NotificationID }) | 
       @Html.ActionLink("التفاصيل", "Details", new { id = item.NotificationID }) | 
       @Html.ActionLink("حذف", "Delete", new { id = item.NotificationID })  
      </td> 
     } 
    } 
    catch (Exception e) 
    { 
     Response.Redirect("~/Views/Home/Index.cshtml"); 
     //I want to redirect to an action, not view. 
    } 
} 

編集:

ホームコントローラ:

[Authorize] 
[AuthorizeUserAccessLevel(UserRole = "Manager,Reviewer")] 
public class HomeController : Controller 
{ 

    TheUnitOfEnternalAuditEntities db = new TheUnitOfEnternalAuditEntities(); 



    public ActionResult Index() 
    { 
     var username = User.Identity.Name; 
     username = username.Replace("NCA\\", ""); 

     User user = db.Users.Where(u => u.UserName.Equals(username)).First(); 





     Session["UserName"] = username; 
     Session["UserID"] = user.UserID; 
     Session["UserFirstName"] = user.FirstName; 
     Session["UserFullName"] = user.FullName; 
     Session["UserRole"] = user.Role.RoleID; 


     var Departments = db.Departments.ToList(); 

     ViewBag.Departments = Departments; 


     return View(db.Departments.ToList()); 
    } 
} 

任意の提案ですか?

+4

私はキャッチが起こるべき理由を理解し、コントローラで表示されないようにリダイレクトする方が良いと思います... –

+0

あなたの 'if'ブロックはコントローラに属し、ビューには属しません。 –

+0

@ArsenMkrtchyanユーザーがスローホームコントローラを通過せずにいくつかのページに移動すると、ホームコントローラのインデックスアクションに複数のセッションが格納されるという問題が発生します。家に帰る前にアドレスバーにアクション名を入力するユーザーもいます。 – askm

答えて

0

エラーページにリダイレクトする場合は、web.configファイルでCustomErrorモードを有効にしてください。

あなたのケースでは、インデックスアクションにリダイレクトしようとしています。これは、アプリケーション内のアイテムのリストである可能性があります。

ビューでこれを行うのはどのような用途ですか?ビューはビジネスロジックを記述するためのものではなく、ビューテンプレートとしてのみ使用する必要があります。

+0

リダイレクトの目的は、アクションを実行する前にセッションを完了させることです。一部のユーザーは、アドレスバーにアクション名を入力してからホームコントローラーに移動します。私は質問を編集しました。 – askm

関連する問題