Похоже, что вызов Html.RenderAction
в приложениях Asp.Net MVC2 может изменить тип mime страницы, если тип дочернего действия отличается от родительского действия.Asp.Net MVC2 RenderAction изменяет тип mime страницы?
Код ниже (тестирование в RTM MVC2), который кажется мне разумным, вернет результат типа 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);
}
}
вид:
<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 всей страницы. –
Обратите внимание, что JavaScriptSerializer(). Сериализация не выполняет сериализацию встроенных кавычек правильно, в отличие от метода Json. Вам понадобится что-то вроде: Func safeForJson = (s) => { return s.NotNull(). Заменить ("\" "," \\\ ""); }; –
Извините, NotNull метод принадлежит мне, но только убедитесь, что строка ввода не является нулевой (natch). –