2012-01-25 20 views
5

Tam web uygulaması geliştiriyorum ve ASP.NET MVC 3 çerçevesini kullanıyorum. ActionFilterAttribute alt sınıfını uyguluyorum.RedirectResult + Bir URL'de parametre olarak nesne

OnActionExecuting yöntemini geçersiz kılıyorum. Bir istisna OnActionExecuting yönteminde yakalanırsa, istemci tarayıcısını yeniden yönlendirmek istiyorum. Yönlendirme URL'si, denetleyicilerimden birinde bir işlem yöntemi hedefler. Exception nesnesinden yönlendirme URL'sine veri aktarmak istiyorum.

Exception nesnesini içeren bir URL oluşturmanın ve URL'yi RedirectResult yapıcısına geçirmenin bir yolu var mı?

cevap

7

İstisna nesnesi içeren bir URL oluşturmak için bir yolu var mı ve sonra RedirectResult yapıcı içine URL'yi geçen?

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

ve hedef eylem Eğer istisna metin parametresini getirmesi mümkün olacak:

Hayır örneğin gibi tek sorgu dizesi parametreleri geçirebilirsiniz

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

Bir Exception nesnesini bir sorgu dizesine dönüştürmenin bir yolu var mı? Sonra sorgu dizesini bir anahtarın değeri olarak RouteValueDictionary yapıcısına iletirim. Hedef eylem yöntemi, bir Exception nesnesini bir giriş parametresi olarak alır. – user1139666

+0

@ user1139666, hayır, yalnızca sorgu dizesi parametreleri olarak ilgilendiğiniz özellikleri eklemelisiniz. –

2

A [HandleError] özniteliğini kullanmak daha iyi bir çözüm olacaktır. Bu özniteliğin yaptığı, bir hata oluştuğunda, kullanıcıya Hata görünümü ile sunulacaktır. Çalışma şekli, bir hatayla karşılaşıldığında, [HandleError] özniteliği varsa, ASP.NET MVC, önce denetleyicinin görünüm klasöründe ve sonra paylaşılan görünüm klasöründe bir Hata görünümü arayacaktır. Örneğin

:

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

bir hata FooController için herhangi bir işlem içinde ortaya çıktığında, ASP.NET MVC ilk Foo Hata görünümü için ~/Görüntüleme/(arayacaktır için Error.aspx adında bir görünüm ASP.NET görünüm motoru veya traş makinesi görünümü motoru için Error.cshtml. Bu görünüm bulunamazsa, ~/Views/Shared içinde arama yapar.

Görünümünüzde, genel bir hata görüntüleyebileceğiniz gibi, herhangi bir özel durum bilgisini de görüntüleyebilirsiniz.

[HandleError] özniteliğinin daha ayrıntılı bir açıklaması için http://blogs.msdn.com/b/gduthie/archive/2011/03/17/get-to-know-action-filters-in-asp-net-mvc-3-using-handleerror.aspx adresine bakın.

3

TempData'yı bu gibi durumlar için kullanabilirsiniz.

Yönlendirmeden önce TempData["MyException"] = myException ayarını yapıp yeniden yönlendirdiğiniz eylemde bu TempData değerini kontrol edin.

İlgili konular