Wie gebe ich in MVC ein String-Ergebnis zurück?

630

In meinem AJAX-Aufruf möchte ich einen Zeichenfolgenwert an die aufrufende Seite zurückgeben.

Soll ich ActionResulteinen String verwenden oder einfach zurückgeben?

user67033
quelle
4
Überprüfen Sie hier , um Bootstrap-Warnmeldung zurückzugeben
Shaijut

Antworten:

1074

Sie können einfach die verwenden ContentResult, um eine einfache Zeichenfolge zurückzugeben:

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

ContentResultStandardmäßig wird a text/plainals Inhaltstyp zurückgegeben . Dies ist überladbar, sodass Sie auch Folgendes tun können:

return Content("<xml>This is poorly formatted xml.</xml>", "text/xml");
Swilliams
quelle
Was ist der contentType, wenn Ihr Rückgabetyp eine Zeichenfolge ist?
user1886419
7
Ich weiß nicht , wie genau diese Antwort war damals, aber zur Zeit ContentResulttut if (!String.IsNullOrEmpty(ContentType))vor Einstellung HttpContext.Response.ContentType. Ich sehe text/htmlmit Ihrem ersten Beispiel, entweder ist dies jetzt die Standardeinstellung oder es ist eine fundierte Vermutung der HttpContext.
user247702
Wie kann ich in View zugreifen?
Pradeep Kumar Das
4
Kleiner Zusatz: Anstatt "text / plain" buchstäblich als Zeichenfolge hinzuzufügen, können Sie eine .NET Framework-Konstante wie MediaTypeNames.Text.Plainoder verwenden MediaTypeNames.Text.Xml. Obwohl es nur einige der am häufigsten verwendeten MIME-Typen enthält. ( docs.microsoft.com/en-us/dotnet/api/… )
Doku-so
Up Voted, obwohl ich den MIME-Typ als "text / plain" angeben musste, wenn ich HTML als Text pro @ Stijn-Kommentar zurückgab.
Roberto
113

Sie können auch nur einen String zurückgeben, wenn Sie wissen, dass dies das einzige ist, was die Methode jemals zurückgeben wird. Zum Beispiel:

public string MyActionName() {
  return "Hi there!";
}
Gehackt
quelle
10
Phil, ist dies eine "Best Practice", könnten Sie bitte den Unterschied zwischen Ihrer Antwort und @swilliam 's
David Perlman
9
Sie können keine Zeichenfolge von einer Methode zurückgeben, die ein ActionResult zurückgibt. In diesem Fall geben Sie also Content ("") zurück, wie von swilliams erläutert. Wenn Sie immer nur einen String zurückgeben müssen, muss die Methode einen String zurückgeben, wie Phil erklärt hat.
Arkiliknam
3
Unter der Annahme , dass die gleiche Wirkung hat mehrere returnAussagen , die verwendet werden , entweder zu senden stringoder JSONoder Viewbasierend auf Bedingungen , dann müssen wir verwenden Contentzurückzukehren String.
DhruvJoshi
11
public ActionResult GetAjaxValue()
{
   return Content("string value");
}
Madhav Singh Raghav
quelle
9
besser mehr während der Antwort zu erklären
Mostafiz
0
public JsonResult GetAjaxValue() 
{
  return Json("string value", JsonRequetBehaviour.Allowget); 
}
Kekule
quelle
0

Ab 2020 ist die Verwendung ContentResultimmer noch der richtige Ansatz, wie oben vorgeschlagen , aber die Verwendung ist wie folgt:

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

Es gibt zwei Möglichkeiten, eine Zeichenfolge vom Controller zur Ansicht zurückzugeben

zuerst

Sie könnten nur eine Zeichenfolge zurückgeben, diese wird jedoch nicht in die HTML-Datei aufgenommen. Die Zeichenfolge wird nur im Browser angezeigt


zweite

könnte eine Zeichenfolge als Objekt von View Result zurückgeben

Hier sind die Codebeispiele, um dies zu tun

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);

    }
}

im Hinblick Datei ausführen AutoProperty wird es Sie umleiten Ergebnis Ansicht und senden s
Code - Ansicht

<!--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>

Ich führe es unter http: // localhost: 60227 / Home / AutoProperty aus

ahmed khattab
quelle