Asp. Сетевой MVC2 RenderAction изменяет тип пантомимы страницы?

Это появляется тот вызов Html.RenderAction у Asp. Сетевые приложения MVC2 могут изменить тип пантомимы страницы, если тип дочернего действия отличается, чем родительское действие.

Код ниже (тестирующий в MVC2 RTM), который кажется разумным мне, возвратит результат типа application/json при вызове Home/Index. Вместо dispylaying страница браузер будет блевать и спрашивать Вас, если Вы захотите загрузить его.

Мой вопрос: я пропускаю что-то? Действительно ли это - ошибка? Если так, каково лучшее обходное решение?

контроллер:

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>
13
задан Gabe Moothart 15 March 2010 в 15:25
поделиться

3 ответа

Это не ошибка. Тип JsonResult должен устанавливать результат в JSON, потому что обычно это то, что вам нужно.

Вам действительно не нужен результат JSON здесь, вам нужна строка JSON . Так почему бы просто не написать это?

[NonAction]
public string States()
{
    string[] states = new[] { "AK", "AL", "AR", "AZ", };

    return new JavaScriptSerializer().Serialize(states);
}
8
ответ дан 1 December 2019 в 21:37
поделиться

Это можно решить, явно заставив тип mime "вернуться" к text/html:

return Json(states, "text/html", JsonRequestBehavior.AllowGet);

Однако не похоже, что это необходимо.

3
ответ дан 1 December 2019 в 21:37
поделиться

Как сказал Craig Stuntz, тип содержимого должен меняться.

Лучшим подходом было бы вызвать это действие с помощью AJAX, а затем присвоить возвращенный объект переменной states в коде JavaScript.

1
ответ дан 1 December 2019 в 21:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: