Parece que llamar al Html.RenderAction
en aplicaciones Asp.Net MVC2 puede alterar el tipo de mime de la página si el tipo de acción del niño es diferente al de la acción principal.Asp.Net MVC2 RenderAction cambia el tipo de página de mime?
El siguiente código (prueba en MVC2 RTM), que me parece sensato, devolverá un resultado del tipo application/json
al llamar al Home/Index
. En lugar de desplegar la página, el navegador descartará y le preguntará si desea descargarla.
Mi pregunta: ¿Extraño algo? ¿Es esto un error? Si es así, ¿cuál es la mejor solución?
controlador:
public class HomeController : Controller
{
public ActionResult Index()
{
ViewData[ "Message" ] = "Welcome to ASP.NET MVC!";
return View();
}
[ChildActionOnly]
public JsonResult States()
{
string[] states = new[] { "AK", "AL", "AR", "AZ", };
return Json(states, JsonRequestBehavior.AllowGet);
}
}
vista:
<h2><%= Html.Encode(ViewData["Message"]) %></h2>
<p>
To learn more about ASP.NET MVC visit <a href="http://asp.net/mvc" title="ASP.NET MVC Website">http://asp.net/mvc</a>.
</p>
<script>
var states = <% Html.RenderAction("States"); %>;
</script>
esto funcionará ... simplemente no parece que una acción infantil deba ser capaz de cambiar el ContentType de toda la página. –
Tenga en cuenta que JavaScriptSerializer(). Serialize no serializa las citas incrustadas correctamente, a diferencia del método Json. Necesitará algo como: Func safeForJson = (s) => { return s.NotNull(). Reemplazar ("\" "," \\\ ""); }; –
Lo siento, el método NotNull es el mío, pero solo me aseguro de que la cadena de entrada no sea nula (natch). –