2

我正在尝试通过 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 会显示我期望的视图。

在此处输入图像描述

4

1 回答 1

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

希望有帮助。

于 2013-03-21T23:07:32.547 回答