Dans MVC, comment renvoyer un résultat de chaîne?

630

Dans mon appel AJAX, je veux retourner une valeur de chaîne à la page d'appel.

Dois-je utiliser ActionResultou simplement renvoyer une chaîne?

user67033
la source
4
vérifier ici pour retourner un message d'alerte d' amorçage
shaijut

Réponses:

1075

Vous pouvez simplement utiliser le ContentResultpour renvoyer une chaîne simple:

public ActionResult Temp() {
    return Content("Hi there!");
}

ContentResultpar défaut renvoie a text/plaincomme contentType . Ceci est surchargeable, vous pouvez donc également faire:

return Content("<xml>This is poorly formatted xml.</xml>", "text/xml");
swilliams
la source
Quel est le contentType si votre type de retour est une chaîne?
user1886419
7
Je ne sais pas comment cette réponse était à l' époque précise, mais actuellement ContentResultne if (!String.IsNullOrEmpty(ContentType))avant réglage HttpContext.Response.ContentType. Je vois text/htmlavec votre premier exemple, que ce soit la valeur par défaut maintenant ou c'est une supposition éclairée par le HttpContext.
user247702
Comment puis-je accéder à View?
Pradeep Kumar Das
4
Petit ajout: au lieu d'ajouter littéralement "text / plain" en tant que chaîne, vous pouvez utiliser une constante de framework .NET comme MediaTypeNames.Text.Plainou MediaTypeNames.Text.Xml. Bien qu'il ne comprenne que certains des types MIME les plus utilisés. ( docs.microsoft.com/en-us/dotnet/api/… )
Doku-so
Voté, même si j'avais besoin de spécifier le type MIME comme "text / plain" lors du retour de HTML en tant que texte par commentaire @Stijn.
Roberto
113

Vous pouvez également renvoyer une chaîne si vous savez que c'est la seule chose que la méthode retournera. Par exemple:

public string MyActionName() {
  return "Hi there!";
}
Piraté
la source
10
Phil, est-ce une "meilleure pratique", pourriez-vous s'il vous plaît expliquer la différence entre votre réponse et celle de @swilliam
David Perlman
9
Vous ne pouvez pas retourner une chaîne à partir d'une méthode qui retourne un ActionResult, donc dans ce cas, vous retournez Content ("") comme expliqué par swilliams. Si vous n'avez besoin que de renvoyer une chaîne, alors la méthode devrait renvoyer une chaîne, comme Phil l'a expliqué.
Arkiliknam
3
En supposant que la même action a plusieurs returninstructions qui sont utilisées pour envoyer soit stringou JSONsoit en Viewfonction de conditions, nous devons utiliser Contentpour renvoyer une chaîne.
DhruvJoshi
11
public ActionResult GetAjaxValue()
{
   return Content("string value");
}
Madhav Singh Raghav
la source
9
mieux expliquer plus lors de la réponse
Mostafiz
0
public JsonResult GetAjaxValue() 
{
  return Json("string value", JsonRequetBehaviour.Allowget); 
}
Kekule
la source
0

À partir de 2020, l'utilisation ContentResultest toujours la bonne approche comme proposé ci - dessus , mais l'utilisation est la suivante:

return new System.Web.Mvc.ContentResult
{
    Content = "Hi there! ☺",
    ContentType = "text/plain; charset=utf-8"
}
Jack Miller
la source
-1

il y a 2 façons de retourner une chaîne du contrôleur à la vue

première

vous pouvez renvoyer uniquement une chaîne mais ne sera pas inclus dans le fichier html ce sera la chaîne de jus apparaître dans le navigateur


seconde

pourrait renvoyer une chaîne en tant qu'objet du résultat de la vue

voici les exemples de code pour ce faire

public class HomeController : Controller
{
    // GET: Home
    // this will mreturn just string not html
    public string index()
    {
        return "URL to show";
    }

    public ViewResult AutoProperty()
    {   string s = "this is a string ";
        // name of view , object you will pass
         return View("Result", (object)s);

    }
}

dans le fichier de vue pour exécuter AutoProperty, il vous redirigera vers la vue des résultats et enverra le
code s pour afficher

<!--this to make this file accept string as model-->
@model string

@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Result</title>
</head>
<body>
    <!--this is for represent the string -->
    @Model
</body>
</html>

je l'exécute sur http: // localhost: 60227 / Accueil / AutoProperty

ahmed khattab
la source