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* } )

Надеюсь, это поможет.

Другие вопросы по тегам