2016-06-23 5 views
0

Ich habe einen Controller, der versucht, eine Datei herunterzuladen, wenn die Datei fehlschlägt Ich möchte eine Zeichenfolge an die Ansicht senden, um den Fehler anzuzeigen. Ich versuche dies mit TempData zu erreichen, ich habe Probleme. Der Fehler wird angezeigt, wenn die Datei nicht heruntergeladen werden kann, aber wenn die Datei erfolgreich heruntergeladen wird, verschwindet die Fehlermeldung nicht. Was könnte ich falsch machen?MVC5, wie man Zeichenkette vom Kontroller zur Ansicht sendet?

-Controller

 if (can_download) 
     { 

      Response.ContentType = contentType; 
      Response.AppendHeader("Content-Disposition", string.Format("attachment; filename={0}", filename)); 
      Response.TransmitFile(path); 
      Response.End(); 
     } 
     else 
     { 
      TempData["AlertMessage"] = "File failed to save"; 

     } 
     return RedirectToAction("Index", page); 

Ansicht

@{ 
    var message = TempData["AlertMessage"]; 
} 

<p class="error-msg">@message</p> 

@section scripts { 
    var message = '@message'; 
    if (message){ 
     $('.error-msg').css('opacity', 100); // show message 
    }else{ 
     $('.error-msg').css('opacity', 0); // hide message 
    } 
} 

Antwort

1

Sie haben die TempData zu löschen, wenn die Datei erfolgreich erzeugt wird.

Es gibt eine Änderung, dass die TempData in einem früheren Fehler nicht verbraucht wird.

if (can_download) 
    { 

     Response.ContentType = contentType; 
     Response.AppendHeader("Content-Disposition", string.Format("attachment; filename={0}", filename)); 
     Response.TransmitFile(path); 
     Response.End(); 

     TempData["AlertMessage"] = string.Empty; 

    } 
    else 
    { 
     TempData["AlertMessage"] = "File failed to save"; 

    } 
    return RedirectToAction("Index", page); 

Ansicht

@{ 
    var message = TempData["AlertMessage"] as string; 
} 

@if (!string.IsNullOrEmpty(message)) { 
<p class="error-msg">@message</p> 

@section scripts { 
    var message = '@message'; 
    if (message){ 
    $('.error-msg').css('opacity', 100); // show message 
    }else{ 
    $('.error-msg').css('opacity', 0); // hide message 
    } 
    } 
} 
+0

Oh ich sehe. Btw in (! String.IsNullOrEmpty (Nachricht) es sagt Nachricht ist ein Objekt, keine Zeichenfolge. Wie kann ich das beheben? – ygongdev

+0

vergaß die Besetzung von TempData [...] zu String, sorry. Bearbeitete es. –

+0

Gleiches Problem noch tritt auf :( Sobald ich auf eine nicht herunterladbare Datei klicke, erhalte ich den Fehler. Wenn ich dann auf eine herunterladbare Datei klicke, ist der Fehler immer noch da :( – ygongdev

Verwandte Themen