2012-01-25 42 views
5

Tôi đang phát triển ứng dụng web đầy đủ và tôi đang sử dụng khung ASP.NET MVC 3. Tôi đang triển khai một lớp con của ActionFilterAttribute.Chuyển hướngResult + Đối tượng dưới dạng tham số trong URL

Tôi đang ghi đè phương pháp OnActionExecuting. Nếu ngoại lệ bị bắt trong phương thức OnActionExecuting Tôi muốn chuyển hướng trình duyệt của khách hàng. URL chuyển hướng nhắm mục tiêu một phương thức hành động trong một trong các bộ điều khiển của tôi. Tôi muốn chuyển dữ liệu từ đối tượng Exception vào URL chuyển hướng.

Có cách nào để tạo URL bao gồm đối tượng Exception và sau đó chuyển URL đó vào hàm xây dựng RedirectResult không?

Trả lời

7

Có cách nào để tạo URL bao gồm đối tượng Ngoại lệ và sau đó chuyển URL đó vào hàm tạo RedirectResult không?

số Bạn có thể vượt qua chỉ số chuỗi truy vấn như ví dụ:

var values = new RouteValueDictionary(new 
{ 
    action = "foo", 
    controller = "bar", 
    exceptiontext = "foo bar baz" 
}); 
filterContext.Result = new RedirectToRouteResult(values); 

và trong hành động mục tiêu mà bạn sẽ có thể lấy tham số văn bản ngoại lệ:

public Action Foo(string exceptionText) 
{ 
    ... 
} 
+0

Có cách nào để chuyển đổi đối tượng Ngoại lệ thành chuỗi truy vấn không? Sau đó, tôi sẽ chuyển chuỗi truy vấn vào hàm tạo của RouteValueDictionary dưới dạng giá trị cho khóa. Phương thức hành động đích sẽ lấy một đối tượng Ngoại lệ làm tham số đầu vào. – user1139666

+0

@ user1139666, không, bạn chỉ nên bao gồm các thuộc tính mà bạn quan tâm dưới dạng tham số chuỗi truy vấn. –

2

Một giải pháp tốt hơn là sử dụng thuộc tính [HandleError]. Thuộc tính này là gì khi một lỗi xảy ra, người dùng sẽ được trình bày với khung nhìn Error. Cách nó hoạt động là khi gặp lỗi, nếu thuộc tính [HandleError] hiện diện, ASP.NET MVC sẽ tìm kiếm một khung nhìn Error, trước tiên trong thư mục view của controller, sau đó trong thư mục chia sẻ view.

Ví dụ:

[HandleError] 
public class FooController : Controller { 
    ... 
} 

Khi một lỗi xảy ra trong bất kỳ hành động cho FooController, đầu tiên ASP.NET MVC sẽ tìm kiếm trong ~/Views/Foo cho một cái nhìn Lỗi (một cái nhìn tên Error.aspx cho công cụ xem ASP.NET hoặc Error.cshtml cho công cụ xem dao cạo). Nếu không tìm thấy chế độ xem đó, nó sẽ tìm kiếm trong ~/Views/Shared.

Trong chế độ xem của bạn, bạn có thể hiển thị lỗi chung, cũng như hiển thị bất kỳ thông tin ngoại lệ nào.

Xem http://blogs.msdn.com/b/gduthie/archive/2011/03/17/get-to-know-action-filters-in-asp-net-mvc-3-using-handleerror.aspx để có giải thích chi tiết hơn về thuộc tính [HandleError].

3

Bạn có thể sử dụng TempData cho các tình huống như thế này.

Chỉ cần đặt TempData["MyException"] = myException trước khi bạn chuyển hướng và sau đó kiểm tra giá trị TempData đó trong hành động bạn chuyển hướng đến.

Các vấn đề liên quan