Jak w MVC mogę zwrócić wynik ciągu?

630

W moim wywołaniu AJAX chcę zwrócić wartość ciągu z powrotem na stronę wywołującą.

Czy powinienem użyć ActionResultczy po prostu zwrócić ciąg?

użytkownik67033
źródło
4
zaznacz tutaj, aby zwrócić komunikat ostrzegawczy bootstrap
shaijut

Odpowiedzi:

1074

Możesz po prostu użyć, ContentResultaby zwrócić zwykły ciąg:

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

ContentResultdomyślnie zwraca a text/plainjako swój contentType . Jest to przeciążalne, więc możesz także:

return Content("<xml>This is poorly formatted xml.</xml>", "text/xml");
Swilliams
źródło
Co to jest contentType, jeśli typ zwracany jest ciągiem?
user1886419,
7
Nie wiem, jak trafna była wtedy ta odpowiedź, ale obecnie ContentResultjest znana if (!String.IsNullOrEmpty(ContentType))przed ustawieniem HttpContext.Response.ContentType. Widzę text/htmlz twoim pierwszym przykładem, który jest teraz domyślny, lub jest wykształconym zgadywaniem HttpContext.
user247702
Jak mogę uzyskać dostęp w widoku?
Pradeep Kumar Das
4
Mały dodatek: zamiast dosłownie dodawać „tekst / zwykły” jako ciąg, możesz użyć stałej .NET Framework, takiej jak MediaTypeNames.Text.Plainlub MediaTypeNames.Text.Xml. Chociaż zawiera tylko niektóre z najczęściej używanych typów MIME. ( docs.microsoft.com/en-us/dotnet/api/… )
Doku-so
W głosowaniu głosowałem, ale musiałem określić typ MIME jako „tekst / zwykły”, zwracając HTML jako tekst w komentarzu @Stijn.
Roberto
113

Możesz również zwrócić ciąg znaków, jeśli wiesz, że to jedyna rzecz, jaką metoda kiedykolwiek zwróci. Na przykład:

public string MyActionName() {
  return "Hi there!";
}
Haacked
źródło
10
Phil, czy to jest „najlepsza praktyka”, czy mógłbyś wyjaśnić różnicę między odpowiedzią a @swilliamem
David Perlman,
9
Nie można zwrócić ciągu z metody, która zwraca ActionResult, dlatego w tym przypadku zwracana jest zawartość („”), jak wyjaśniono w swilliams. Jeśli kiedykolwiek będziesz musiał tylko zwrócić ciąg, wówczas metoda zwróci ciąg, jak wyjaśnił Phil.
Arkiliknam,
3
Zakładając, że samo działanie ma wiele returntwierdzeń, które są używane do wysyłania albo stringalbo JSONalbo Viewoparta na warunkach wtedy musimy użyć Content, aby powrócić ciąg.
DhruvJoshi
11
public ActionResult GetAjaxValue()
{
   return Content("string value");
}
Madhav Singh Raghav
źródło
9
lepiej wyjaśnić więcej podczas odpowiedzi
Mostafiz 27.04.16
0
public JsonResult GetAjaxValue() 
{
  return Json("string value", JsonRequetBehaviour.Allowget); 
}
Kekule
źródło
0

Począwszy od 2020 r. Używanie ContentResultjest nadal właściwym podejściem, jak zaproponowano powyżej , ale użycie jest następujące:

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

istnieją 2 sposoby na zwrócenie ciągu z kontrolera do widoku

pierwszy

możesz zwrócić tylko ciąg znaków, ale nie będzie on zawarty w pliku HTML, będzie to ciąg znaków pojawiający się w przeglądarce


druga

może zwrócić ciąg jako obiekt View Result

oto przykłady kodu, aby to zrobić

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

    }
}

w widoku plików do uruchomienia AutoProperty będzie przekierowanie do Result widok i wyśle e
kod do widzenia

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

uruchamiam go na http: // localhost: 60227 / Home / AutoProperty

Ahmed Khattab
źródło