En MVC, ¿cómo devuelvo un resultado de cadena?

630

En mi llamada AJAX, quiero devolver un valor de cadena a la página de llamada.

¿Debo usar ActionResulto simplemente devolver una cadena?

usuario67033
fuente
44
marque aquí para devolver el mensaje de alerta de arranque
shaijut

Respuestas:

1075

Puede usar el ContentResultpara devolver una cadena simple:

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

ContentResultpor defecto devuelve a text/plaincomo su contentType . Esto se puede cargar, por lo que también puede hacer:

return Content("<xml>This is poorly formatted xml.</xml>", "text/xml");
swilliams
fuente
¿Cuál es el tipo de contenido si su tipo de retorno es una cadena?
user1886419
77
No sé cuán precisa fue esta respuesta en ese momento, pero actualmente lo ContentResulthace if (!String.IsNullOrEmpty(ContentType))antes de configurar HttpContext.Response.ContentType. Estoy viendo text/htmlcon su primer ejemplo, o ese es el valor predeterminado ahora o es una suposición educada por el HttpContext.
user247702
¿Cómo puedo acceder en la vista?
Pradeep Kumar Das
44
Pequeña adición: en lugar de agregar literalmente "text / plain" como una cadena, puede usar una constante de .NET framework como MediaTypeNames.Text.Plaino MediaTypeNames.Text.Xml. Aunque solo incluye algunos de los tipos MIME más utilizados. ( docs.microsoft.com/en-us/dotnet/api/… )
Doku-so
Voté, aunque necesitaba especificar el tipo mime como "text / plain" al devolver HTML como texto por comentario de @Stijn.
Roberto
113

También puede simplemente devolver una cadena si sabe que eso es lo único que devolverá el método. Por ejemplo:

public string MyActionName() {
  return "Hi there!";
}
Hackeado
fuente
10
Phil, ¿es esta una "mejor práctica"? ¿Podrías explicar la diferencia entre tu respuesta y la de @swilliam?
David Perlman
99
No puede devolver una cadena de un método que devuelve un ActionResult, por lo que en este caso devuelve Contenido ("") como explicaron swilliams. Si solo necesita devolver una cadena, entonces el método devolvería una cadena, como explicó Phil.
Arkiliknam
3
Suponiendo que una misma acción tiene múltiples returndeclaraciones que se utilizan para enviar cualquiera stringo JSONo Viewbasado en las condiciones entonces debemos utilizar Contentpara volver cadena.
DhruvJoshi
11
public ActionResult GetAjaxValue()
{
   return Content("string value");
}
Madhav Singh Raghav
fuente
99
mejor explicar más durante la respuesta
Mostafiz
0
public JsonResult GetAjaxValue() 
{
  return Json("string value", JsonRequetBehaviour.Allowget); 
}
Kekule
fuente
0

A partir de 2020, el uso ContentResultsigue siendo el enfoque correcto como se propuso anteriormente , pero el uso es el siguiente:

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

hay 2 formas de devolver una cadena del controlador a la vista

primero

podría devolver solo una cadena pero no se incluirá en el archivo html, solo aparecerá una cadena en el navegador


segundo

podría devolver una cadena como objeto de Ver resultado

aquí están los ejemplos de código para hacer esto

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

    }
}

en el archivo de vista para ejecutar AutoProperty , lo redireccionará a la vista de resultados y le enviará un
código para ver

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

lo ejecuto en http: // localhost: 60227 / Home / AutoProperty

ahmed khattab
fuente