Anzeige von benutzerdefinierten Fehlermeldung im ASP .Net 5, MVC 6

Ich habe eine Methode, die den Aufruf der api-Methode. Die api-Methode enthält SQL-Anweisungen insert, update, delete. Aber wenn ein Fehler geworfen wird von der gespeicherten Prozedur, Wie für die Anzeige im front-als Fehlermeldung. Ich bin mit ASP .NET 5 und MVC 6. Meine Methode ist wie folgt :

[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Method(Model model)
{
    string url = ConfigurationSettingHelper.BaseUrl + "apiurl";

    using (var client = new HttpClient())
    {
        client.BaseAddress = new Uri(url);
        client.DefaultRequestHeaders.Accept.Clear();
        client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));

        HttpResponseMessage response = await client.PostAsJsonAsync<Model>(url, model);

        if (response.IsSuccessStatusCode)
        {
            var data = await response.Content.ReadAsStringAsync();
            var Msg = Newtonsoft.Json.JsonConvert.DeserializeObject<string>(data);

            if (!string.IsNullOrEmpty(Convert.ToString(Msg)))
            {
                //Here code to display error message.
            }
        }
    }
    return View();
}

Mir helfen, die Anzeige Msg-variable string-Nachricht auf der Seite.

Danke

  • Du meinst wie die Reaktion.Write(Msg); ?
  • Ja, wie, dass nur, aber das ist nicht unterstützt ASP.Net 5. Eine andere Methode?
InformationsquelleAutor iDipa | 2016-01-18



2 Replies
  1. 4

    Gibt es ein paar Möglichkeiten, dies zu erreichen, denke ich.

    1) Verwenden Sie ein ViewModel, das speichern könnte ein List<string> Errors dass Sie können gehen Sie zurück zu Ihrem Blick. Obwohl dies für alle Ansichten wäre sehr repetitiv und nicht leicht zu pflegen.

    2) Verwenden TempData zum speichern der Fehlermeldungen statt, in der ViewModel. Auf diese Weise, Sie überprüfen könnten, in Ihrem _Layout.cshtml, wenn es irgendwelche Elemente in TempData, und zeigt Sie in irgendeiner Weise Sie wollen (dies würde geschehen, um alle Ihre Ansichten).

    3) Verwenden toastr.js und die TempData Ansatz zum anzeigen ein schönes toast statt. Beginnen durch die Implementierung eines POCO, zu dem auch ein Enum für die verschiedenen Antwort-Typen stehen zur Verfügung in toastr.js ich.e Error, Info, Success, Warning. Erstellen Sie dann einen BaseController.cs-Datei, die Ihre regler implementieren, siehe unten für ein Beispiel.

    Weiter in Ihrem Controller, können Sie rufen Sie CreateNotification(AlertType.Fehlermeldung „Dies ist eine Testnachricht.“, „Fehler“);

    Schließlich, Sie brauchen, um Logik in die _Layout.cshtml-Datei zu machen und die Benachrichtigungen. Stellen Sie sicher, Sie fügen Sie einen Verweis auf toastr.js und seine CSS-Datei, und siehe unten für ein Beispiel, wie wire es:

    Vollständigen Beispiel:

    Benachrichtigung.cs

    public class Alert
    {
        public AlertType Type { get; set; }
        public string Message { get; set; }
        public string Title { get; set; }
    }
    
    public enum AlertType
    {
        Info,
        Success,
        Warning,
        Error
    }

    BaseController.cs

    public override void OnActionExecuting(ActionExecutingContext context)
        {            
            GenerateNotifications();    
    
            base.OnActionExecuting(context);
        }
    
    public void CreateNotification(Notification.AlertType type, string message, string title = "")
        {
            Notification.Alert toast = new Notification.Alert();
            toast.Type = type;
            toast.Message = message;
            toast.Title = title;
    
            List<Notification.Alert> alerts = new List<Notification.Alert>();
    
            if (this.TempData.ContainsKey("alert"))
            {
                alerts = JsonConvert.DeserializeObject<List<Notification.Alert>>(this.TempData["alert"].ToString());
                this.TempData.Remove("alert");
            }
    
            alerts.Add(toast);
    
            JsonSerializerSettings settings = new JsonSerializerSettings
            {
                TypeNameHandling = TypeNameHandling.All
            };
    
            string alertJson = JsonConvert.SerializeObject(alerts, settings);
    
            this.TempData.Add("alert", alertJson);
        }
    
        public void GenerateNotifications()
        {
            if (this.TempData.ContainsKey("alert"))
            {               
                ViewBag.Notifications = this.TempData["alert"];
                this.TempData.Remove("alert");
            }
        }

    Layout.cshtml

    @if (ViewBag.Notifications != null)
        {
            JsonSerializerSettings settings = new JsonSerializerSettings
        {
            TypeNameHandling = TypeNameHandling.All
        };
        List<Notification.Alert> obj = JsonConvert.DeserializeObject<List<Notification.Alert>>(ViewBag.Notifications, settings);
    
        foreach (Notification.Alert notification in obj)
        {
            switch (notification.Type)
            {
                case Notification.AlertType.Success:
                    <script type="text/javascript">toastr.success('@notification.Message', '@notification.Title');</script>
                    break;
                case Notification.AlertType.Error:
                    <script type="text/javascript">toastr.error('@notification.Message', '@notification.Title');</script>
                    break;
                case Notification.AlertType.Info:
                    <script type="text/javascript">toastr.info('@notification.Message', '@notification.Title');</script>
                    break;
                case Notification.AlertType.Warning:
                    <script type="text/javascript">toastr.warning('@notification.Message', '@notification.Title');</script>
                    break;
            }
        }
    }
    • hey können Sie arbeiten Beispiel für deine 3. Lösung??
    • Ich habe erweitert das Beispiel um zu zeigen, die Klasse und Enum, die Sie hinzufügen möchten. Das einzige, was Links ist das hinzufügen des CSS – /JS-includes in Ihren Anzeigen für toastr.js.
    • Super Antwort, hat mir sehr geholfen – aber ich habe ein Problem – wenn Sie return View(model) – mit Fehler – die Methode OnActionExecuting nicht ausgelöst – wie beheben? Thx
    • Ich bin mir nicht sicher, ich Folge dir voll zu – was meinst du return View() mit Fehler? Sagen Sie, dass eine Ausnahme geworfen wird, die irgendwo in Ihrem code, bevor Sie die View zurückgegeben wird?
  2. 0

    Können Sie Response.Write(str) sowohl in der code-behind und auf dem .ASPX-Seite:

    <%
    Response.Write(str)
    %>

    Mit Response.Write() im code-behind-Orte der Schnur, bevor der HTML-Code der Seite, es ist also nicht immer sinnvoll.

    Können Sie auch erstellen Sie ein server-Steuerelement irgendwo auf Ihrer ASPX-Seite, wie ein label oder literal, und setzen Sie den text oder Wert, die Steuern, in der code-behind:

    .ASPX:

    <asp:Label id="lblText" runat="server" />

    Code-behind:

    lblText.Text = "Hello world"

    Ausgaben im HTML-Format:

    <span id="lblText">Hello World</span>

    Wenn Sie nicht wollen, s Hinzugefügt, verwenden Sie ein literal:

    <asp:Literal id="litText" runat="server" />

    Und legen Sie die value-Attribut der literalen anstelle der text-Attribut:

    litText.Value = "Hello World"
    • Ich dn nicht aspx-Seite. Ansicht-Seite ist .cshtml-Seite
    • Ich schlage vor, Ihnen zu Folgen, tutorial

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.