我试图通过ajax返回部分视图。我的代码喜欢下面,当部分视图不在某个区域时,它可以正常工作。
[HttpPost]
public ActionResult SearchLogsAjax(string searchParams)
{
// Do some searching
return PartialView("LogResults", searchResults);
}
首次打开页面时会呈现部分视图。当我按下搜索按钮对ActionMethod进行ajax调用时,会出现问题。如果它在管理区域,我会得到经典视图未找到错误。
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会显示我所期望的视图。
答案 0 :(得分:0)
您可以使用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* } )
希望有所帮助。