На практике я обнаружил, что IsAjaxRequest
не является надежным на 100%.
При большом количестве запросов с мобильного устройства оно иногда возвращало бы false
при вызове Ajax.
Я заканчивал тем, что добавил параметр строки запроса (например, частичный = 1) в мои запросы Ajaxчтобы убедиться, что контроллер не был обманут.Это было около MVC 4, поэтому, возможно, с тех пор его можно было исправить, но я не могу позволить себе рискнуть.
В моем базовом контроллере (унаследованном всеми моими контроллерами) я добавил это:
public bool IsPartialPageRequest
{
get
{
return Request.IsAjaxRequest() || !string.IsNullOrEmpty(Request["partial"]);
}
}
В контроллерах у меня тогда есть что-то вроде:
if (!base.IsPartialPageRequest)
{
ViewBag.Layout = "~/Views/Shared/_Layout.cshtml";
}
И, наконец, в моих взглядах у меня есть:
@{
Layout = ViewBag.Layout;
}
Я гарантирую, что всегда добавляю &partial=1
к своему Ajaxзапросы (на всякий случай), и это было на 100% надежно с тех пор.