2016-08-09 130 views
0

Es gibt einen Controller, der eine Ausnahme abfängt. Ich möchte die Fehlermeldung an ein generisches Javascript in _Layout.cshtml übergeben, um auf alle Seiten anzuwenden. Es wird vollständig gefunden, wenn der Wert von Normalansicht zu _Layout.cshtml durch z. @ViewBag = "Fehlermeldung"; in der Ansicht oder ViewBag.ErrorMessage = "Fehlermeldung"; in der Steuerung, aber es funktioniert nicht in Teilansicht.Wie wird der Wert von der partiellen Ansicht an die gemeinsame Ansicht übergeben _Layout.cshtml in asp.net MVC?

Was soll ich tun, um die String-Nachricht von Teilansicht zu _Layout.cshtml ?? übergeben?

+0

Auf welches Ereignis Sie den Wert übergeben wollen? auf der Seite laden? – Shyju

+2

ViewBag sollte in der Layoutdatei zugänglich sein, können Sie bitte etwas Code posten, um zu zeigen, was Sie probiert haben? – sachin

Antwort

0

Nicht sicher, was genau Sie versuchen zu tun. Sie können jedoch einen Skriptblock in Ihre Teilansicht einfügen, der nach dem Rendern eine globale JavaScript-Funktion ausführt und möglicherweise eine Nachricht oder andere Daten enthält.

zum Beispiel in _Layout Sie haben:

<script> 
    function ShowError(message) { 
     alert(message); 
    } 
</script> 

und dann in Ihrem Teil Sie haben:

<script> 
// check for existence of error and if so 
ShowError(ErrorMessage); 
</script> 
+0

Meistens 'Partial View' verwenden nicht' _Layout file'. Also diese Lösung ist nicht effizient one ... – mmushtaq

+0

@mmushtaq aber es ist speziell in der Frage. – Dillon

+0

@mmushtaq Gibt es eine andere Lösung als die _Layout-Datei, wenn ich die Alert-Funktion global auf alle Teilansichten anwenden möchte? – dennisccy

0

Wenn Sie Daten, um von Teilansicht auf ihre Anordnung während der gleichen Anfrage möchten, Sie können über das ViewBag Objekt tun so:

Teilansicht Datei

@{ 
ViewBag.ErrorMessage = "error message"; 
} 

_Layout Datei

@if (ViewBag.ErrorMessage != null) 
{ 
    <script> 
    alert(@ViewBag.ErrorMessage); 
    </script> 
} 

Wenn Sie eine Ausnahme in Controller-Aktion fangen wollen, und dann Fehlermeldung auf Umleitung übergeben, können Sie dies tun, TempData mit:

Controller

public ActionResult SomeAction(){ 
... 
try{ 
    .... 
}catch(Exception e){ 
    TempData["errorMessage"] = e.Message; 
    return RedirectToAction("MaybeSomeOtherAction"); 
} 
... 
} 

_layout-Datei für "MaybeSomeOtherAction"

@if (TempData["errorMessage"] != null) 
{ 
    <script> 
    alert(@TempData["errorMessage"]); 
    </script> 
} 
0

Machen Sie eine gemeinsame Eigenschaft für Fehler;

public static class Common 
    { 
     public static bool ERROR {get;set;} 
    } 

Wenn eine Ausnahme ausgelöst oder eine Fehlermeldung angezeigt wird, setzen Sie diese Eigenschaft auf true;

try 
{ 
    //Any Code 
} 
catch(Exception) 
{ 
    Common.ERROR = true; 
    return PartialView("_PartialView"); 

} 

At Your _Layou Datei, Ansichten oder _Partial Ansicht, können Sie diese Eigenschaft bei Document.Ready überprüfen und wenn es wahr ist, dann können Sie eine Fehlerwarnung angezeigt.

$(function(){    
     if(@Html.Raw(Json.Encode(@HelloWorldMvcApp.Common.ERROR))) 
     { 
       alert("error message"); 
        return; 
     } 
}) 


Demo if this property is True

Demo if it is False or its value is not set to true