2010-12-14 66 views
17

J'ai contrôleur ASP.NET MVC nommé dictionnaire avec la méthode ControlsLangJsFile. La méthode retourne la vue du contrôle des utilisateurs (ASCX) qui contient des variables JavaScript.Comment faire pour modifier ContentType renvoyé dans le contrôleur ASP.NET MVC (ActionResult)

Lorsque j'appelle la méthode, elle renvoie des variables avec des chaînes analysées, mais le type de contenu est html/text. Il devrait être: application/x-javascript

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

Comment puis-je y parvenir?

Répondre

27

Les utilisateurs contrôlent n'accepte pas ContentType = "text/xml"

Solution:

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

Cela ne fonctionne pas pour les vues Razor (pas sûr sur les autres moteurs de vue). Voir [ma réponse] (http://stackoverflow.com/a/15930411/5496) pour la solution: – Peter

+0

J'utilise Razor/MVC 4 et cela fonctionne bien dans le contrôleur (où je préfère placer ce car je ne veux même pas de vue si je retourne des types de fichiers, tels que PDF). – Fenton

2

Comme cela, il suffit de changer le type de contenu en conséquence:

ASP.NET MVC and text/xml content type

+0

Les utilisateurs contrôlent dosn't acceptent ContentType = "text/xml" – jmav

+0

S'il vous plaît, vous pouvez aussi consulter les autres réponses ... – rsenna

+0

je l'ai fait, aussi ajouté une autre solution, thx – jmav

1

Essayez :

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

J'ai eu cette même question tout en construisant une vue de rasoir avec JS en elle et a tenté d'utiliser @ solution de jmav:

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

qui ne fonctionne pas lorsque vous retournez un View(). Il semble que le rendu de vue définit le type de contenu lui-même malgré ce qui est assigné dans la méthode du contrôleur.

Au lieu de cela, faire l'affectation dans le code de la vue lui-même:

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

La définition de "Response.ContentType" dans l'action Controller a fonctionné pour moi dans MVC 3. –