Ajax.Actionlink不加载Partial View,而是简单的View

时间:2012-12-23 15:55:49

标签: asp.net-mvc-3 asp.net-ajax

我一直在冲浪,仍然无法弄清楚我的代码有什么问题,为什么它不起作用。

代码是下一个:

public ActionResult FindUser()
    {
        if (Request.IsAjaxRequest())
        {
            return PartialView();
        }
        return View();
    }

加载PartialView,允许按名称查找用户:

@using (@Html.BeginForm("Find", "User"))
{
    @Html.TextBoxFor(u => u.UserName);
    @Html.HiddenFor(u => u.UserName);
    <input type="submit" value="Find" />
}

索引视图有一个Actionlink:

@Ajax.ActionLink("Find user","FindUser",new AjaxOptions { UpdateTargetId = "forAjax", InsertionMode = InsertionMode.Replace})
<div id="forAjax"></div>

我已经包含在视图中

<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.js")" type="text/javascript"></script>

以及在我的配置中启用了这些

<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />

但它仍然在新的“窗口”中加载我的PartialView,但不在“查找用户”链接下方。我的浏览器启用了Javascript。我的代码出了什么问题?

1 个答案:

答案 0 :(得分:3)

确保您已包含jquery,并且您已经 之前包括jquery.unobtrusive-ajax.js

<script src="@Url.Content("~/Scripts/jquery-1.7.1.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.js")" type="text/javascript"></script>

同样在您的局部视图中,您有一个标准表单,而不是AJAX表单。提交此表单时,不会有任何AJAX请求。如果您希望使用AJAX请求提交此表单,请确保您在部分代码中使用了Ajax.BeginForm而不是Html.BeginForm

@using (Ajax.BeginForm("Find", "User", new AjaxOptions { UpdateTargetId = "forAjax", InsertionMode = InsertionMode.Replace }))
{
    @Html.TextBoxFor(u => u.UserName);
    @Html.HiddenFor(u => u.UserName);
    <input type="submit" value="Find" />
}

您应该检查的另一件事是您在浏览器中使用的javascript调试工具的网络和控制台选项卡。在网络选项卡中查找javascript错误以及可能的404。