2010-12-14 6 views
17

Ich habe ASP.NET MVC-Controller namens Dictionary mit Methode ControlsLangJsFile. Die Methode gibt die Ansicht der Benutzersteuerung (ASCX) zurück, die JavaScript-Variablen enthält.Wie zurückgegebene ContentType in ASP.NET MVC-Controller (ActionResult) geändert werden

Wenn ich die Methode aufrufen, gibt es Variablen mit geparsten Strings zurück, aber Inhaltstyp ist HTML/Text. Es sollte sein: application/x-javascript

public ActionResult ControlsLangJsFile() 
    { 
     return View("~/Views/Dictionary/ControlsLangJsFile.ascx",); 
    } 

Wie kann ich dies tun erreichen?

Antwort

27

Benutzer steuern akzeptiert keine Content = "text/xml"

Lösung:

public ActionResult ControlsLangJsFile() 
    { 
     Response.ContentType = "text/javascript"; 
     return View("~/Views/Dictionary/ControlsLangJsFile.ascx"); 
    } 
+2

Dies funktioniert nicht für Razor-Ansichten (bin nicht sicher über andere View-Engines). Siehe [meine Antwort] (http://stackoverflow.com/a/15930411/5496) für die Lösung: – Peter

+0

Ich benutze Razor/MVC 4 und das funktioniert gut in der Steuerung (wo würde ich das lieber platzieren da ich nicht einmal eine Ansicht möchte, wenn ich Dateitypen, wie zB PDF, zurückgebe. – Fenton

2

Wie diese nur den Inhaltstyp entsprechend ändern:

ASP.NET MVC and text/xml content type

+0

Benutzer dosn't steuern Content = „text/xml“ akzeptieren – jmav

+0

Bitte beachten Sie auch die anderen Antworten sehen ... – rsenna

+0

habe ich auch eine andere Lösung hinzugefügt, thx – jmav

1

Try :

return Json(new 
{ 
     uCode = SysContext.CurrentUserCode, 
     uPwd = SysContext.CurrentUserPwd, 
     rMe = SysContext.RememberMe 
}, "application/json", JsonRequestBehavior.AllowGet); 
14

Ich hatte diese gleiche Frage während einer Rasierklinge Ansicht mit JS in Gebäude es und versucht @ jmav-Lösung zu nutzen:

public ActionResult Paths() 
{ 
    Response.ContentType = "text/javascript"; //this has no effect 
    return View(); 
} 

das nicht funktioniert, wenn Sie eine Ansicht zurückkehren(). Es scheint, dass das View-Rendering den Inhaltstyp selbst festlegt, ungeachtet dessen, was in der Controller-Methode zugewiesen ist.

Stattdessen machen die Zuordnung in der Ansicht Code selbst:

// this lives in viewname.cshtml/vbhtml 
@{ 
    this.Response.ContentType = "text/javascript"; 
} 
// script stuff... 
+1

Die Einstellung 'Response.ContentType' in der Controller-Aktion funktionierte für mich in MVC 3. –

Verwandte Themen