MVC 3 Ajax返回区域的局部视图

时间:2012-11-01 21:56:09

标签: ajax asp.net-mvc-3 razor partial-views

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

enter image description here

1 个答案:

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

希望有所帮助。