2016-04-12 13 views
0

Bir yardımcı sınıfında bir try-catch segmentim var. Try catch segmenti bir hata atarsa ​​bir görünüm vermek istiyorum. Şimdi var:Mvc 5'de bir yardımcı sınıftan görünüm döndürme

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

Tam olarak burada ne soruyorsunuz? –

+0

Görünümü döndürmek istiyorum ~/Görünümler/Ana sayfa/Dizin.cshtml Bir denetleyici değil ve bir denetleyici içindeyim, İade görünümü ("~/Görünümler/Ana Sayfa/Dizin.cshtml"); çalışmaz –

+0

İstisnai kontrol ünitesine geri getirebilmeniz için izin veriliyor mu? – Draken

cevap

2

iki yolu vardır 2. Yardımcıda istisna yakalamak, örneğin başarı/başarısızlık sinyali vermek için bir boole + kontrolördeki bu değere cevap verin.

1 yaklaşım:

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"); 
    } 
} 

2 yaklaşım:

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"); 
} 

Ayrıca, Görünümünüz tüm sonuçlarını işlemezse, Görünümünüzdeki yardımcıları çağırmaktan kaçının. Bir Görünüm zaten çalışıyorsa, onu başka bir görünüme 'değiştiremezsiniz', bu, Denetleyicinin görevi ve sorumluluğu olacaktır.

+0

Sorun, kullanıcı dizin görünümünde bir düğmeyi tıkladığında istisnanın ortaya çıkması olabilir. Bunu kısmi bir görüş kullanarak çözebilirdim, ama tercih etmemeyi tercih ederim. Bir kontrolörün yardımcı sınıftan çağrılması için herhangi bir yol var mı? (Proje zaten spagetti kodudur, bu yüzden en iyi uygulama olmak zorunda değildir) –

+0

Sanırım yönteminizi kullanmanın bir yolunu buldum. Sadece test edeyim :) –

+0

Bir çekicilik gibi çalıştım :) –

0

bu deneyin: + denetleyiciye taşıma istisna ekleyin
1. (yeniden) yardımcısında istisna veya
:

try 
{ 

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

Geçerli bağlamda Redirect eylemine ulaşılamıyor mesajı alıyorum. Muhtemelen bir denetleyicide değil, bir yardımcı sınıfta olduğum için. –

+0

Bir denetleyiciden denemeyi, yakalamayı ve yönlendirmeyi denemelisiniz. – Remay

+0

Bu durumda bunu yapmaya cesaret edemiyorum. System.Xml kullanıyorum; ve System.ServiceModel.Syndication; Yeni bir projeye başladığımda VS, system.xml dosyasının doğru sürümünü bulmakta zorluk çekiyordu, şimdi kodun bu bölümüne dokunmaya cesaret edemiyorum. Muhtemelen çok paranoyak :) –

İlgili konular