Ответ 1
Причиной этого является то, что все вызовы Html.Action
выполняются напрямую. Что-то вроде:
- Индекс называется
- Результат поиска выполнен
- Выполнено действие Hello, установите ContextType
- Возвращается результат отображения индексов
- Браузер отображает страницу
У вас есть два варианта:
- Разрыв логики, которая генерирует "Привет, мир!". в обычный класс С# и вызывать его непосредственно в действии контроллера индекса.
- Загрузите действие Hello через ajax, а затем отобразите
alert
.
Вариант 1
public class HelloController
{
YourBusiness _yb;
public HelloController(YourBusiness yb)
{
_yb = yb;
}
public ActionResult Index()
{
return View(yb.GenerateHello())
}
// used for everything but Index
public ActionResult Hello()
{
return Json(new{ greeting = yb.GenerateHello() }, JsonRequestBehavior.AllowGet);
}
}
public class YourBusiness
{
public string GenerateHello()
{
return "Hello wolrd!";
}
}
Вариант 2
<script type="text/javascript">
$.get('@Url.Action("Hello")', function(response) {
alert(response.greeting);
}
</script>
Боковое примечание
Internet Explorer довольно агрессивен, когда дело доходит до кеширования. Реакции JSON будут изменены. Поэтому я рекомендую вам также указать кеш для действия JSON:
[OutputCache(Duration = 0, NoStore = true)]
public ActionResult Hello()
{
return Json(new{ greeting = "hello, world!" }, JsonRequestBehavior.AllowGet);
}