MVC 3 Ajax возвращает частичный вид на площадь
Я пытаюсь вернуть частичное представление через ajax. Мой код нравится ниже, и он прекрасно работает, когда частичное представление не в области.
[HttpPost]
public ActionResult SearchLogsAjax(string searchParams)
{
// Do some searching
return PartialView("LogResults", searchResults);
}
Частичное представление отображается при первом открытии страницы. Проблема возникает, когда я нажимаю кнопку поиска, которая вызывает Ajax-вызов ActionMethod. Если это находится в области администратора, я получаю классический вид не найдена ошибка.
The partial view 'LogResults' was not found or no view engine supports the searched locations. The following locations were searched:
~/Views/Log/LogResults.aspx
~/Views/Log/LogResults.ascx
~/Views/Shared/LogResults.aspx
~/Views/Shared/LogResults.ascx
~/Views/Log/LogResults.cshtml
~/Views/Log/LogResults.vbhtml
~/Views/Shared/LogResults.cshtml
~/Views/Shared/LogResults.vbhtml
Почему он не смотрит в области администратора, которая является текущей областью? Есть ли способ для меня, чтобы указать название области, которую я хотел, чем-то вроде new { area = "Admin" }
С другой стороны, когда я перемещаю мышь над частичным именем представления в коде, ReSharper показывает представление, которое я ожидал.
1 ответ
Вы можете указать желаемое имя области, используя параметр и синтаксис RouteValuesDictionary, как вы предложили
new { area = "Admin" }
Но самая сложная часть для меня - получить правильную сигнатуру метода (то есть сигнатуру, которую я намерен использовать), потому что существует более двух вариантов, и ПРОСТО получить неверную сигнатуру и все же быть синтаксически правильным.
В этом случае я думаю, что вы хотите подпись:
public static MvcHtmlString ActionLink(
this AjaxHelper ajaxHelper,
string linkText,
string actionName,
RouteValueDictionary routeValues,
AjaxOptions ajaxOptions
)
Поэтому измените Ajax.ActionLink, который у вас есть (который вы не публиковали), примерно так:
@Ajax.ActionLink( "Link Text", "YourAction", "YourController", new { area = "YourArea" }, new AjaxOptions() { *the ajaxoptions you've been using* } )
Надеюсь, это поможет.