Gab*_*art 13 asp.net-mvc renderaction mime-types asp.net-mvc-2
Html.RenderAction如果子操作的类型与父操作的类型不同,调用Asp.Net MVC2应用程序似乎可以改变页面的mime类型.
下面的代码(在MVC2 RTM中测试),对我来说似乎很合理,application/json在调用时会返回类型的结果Home/Index.浏览器不会显示页面,而是会barf并询问您是否要下载它.
我的问题:我错过了什么吗?这是一个错误吗?如果是这样,最好的解决方法是什么?
控制器:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
视图:
<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>
Run Code Online (Sandbox Code Playgroud)
这不是一个错误.该JsonResult类型应该将结果设置为JSON,因为这通常是您想要的.
你真的不想要JSON 结果,你想要一个JSON 字符串.那么为什么不写那个呢?
[NonAction]
public string States()
{
string[] states = new[] { "AK", "AL", "AR", "AZ", };
return new JavaScriptSerializer().Serialize(states);
}
Run Code Online (Sandbox Code Playgroud)
小智 8
我认为这是一个错误.如果这是一个正在渲染的子动作,为什么它会改变父动作响应?Html.Action也是如此,它将它呈现为一个字符串.我的解决方法是:
Html.ViewContext.HttpContext.Response.ContentType = "text/html";
Run Code Online (Sandbox Code Playgroud)
在调用Html.Action之后.我想有人可以写一个包装器Html Helper扩展,类似于:
var aux = Html.ViewContext.HttpContext.Response.ContentType;
Html.Action(....); // or Html.RenderAction(...)
Html.ViewContext.HttpContext.Response.ContentType = aux;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2332 次 |
| 最近记录: |