似乎在Asp.Net中調用Html.RenderAction
如果子動作的類型與父動作的類型不同,那麼MVC2應用程序可以更改頁面的MIME類型。Asp.Net MVC2 RenderAction更改頁面MIME類型?
下面的代碼(在MVC2 RTM中測試)對我來說似乎很明智,當調用Home/Index
時,將返回application/json
類型的結果。瀏覽器不會讓頁面變得混亂,而會詢問您是否要下載它。
我的問題:我錯過了什麼嗎?這是一個錯誤?如果是這樣,什麼是最好的解決方法?
控制器:
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);
}
}
觀點:
<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>
這將工作......它似乎並不像一個兒童動作應該能夠改變整個頁面的ContentType。 – 2010-03-15 15:52:04
請注意,與Json方法不同,JavaScriptSerializer().Serialize不能正確序列化嵌入的引號。你需要這樣的: Func safeForJson =(s)=> { return s.NotNull()。Replace(「\」「,」\\\「」); }; –
2012-02-06 15:16:48
對不起,NotNull方法是我的,但只是確保輸入字符串不爲空(natch)。 – 2012-02-06 15:17:29