1

我想要一个超链接,当点击它时,它会在同一页面中打开,而不是刷新整个页面,而不是打开不同的链接。在我的控制器中,我有以下功能

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

当我运行程序并插入断点时,return view();我意识到我的程序总是返回view()而不是PartialView();

这是index.cshtml代码

@section head{

    <script type="text/javascript"
            src="@Url.Content("~/scripts/AjaxDemo.js")"></script>
}
@Html.ActionLink("Show the Privacy Policy", "PrivacyPolicy", null, new{id="privacyLink"})

<div id="privacy"></div>

在部分视图 PrivacyPolicy 中,我只有很少的文本。

AjaxDemo.js看起来像这样

$(document).ready(function () {
    $('#privacyLink').click(function (event) {
        event.preventDefault();
        var url = $(this).attr('href');
        $('#privacy').load(url);
    });
});

为什么我的程序不返回部分视图?或者为什么不接受ajax请求?如果我的浏览器中的 javascript 启用,我的程序不应该在同一索引页面 (CustomAjax) 中打开链接吗?

4

2 回答 2

2

如果你做一个 jQuery 加载,它实际上会执行一个正常的请求,然后在给定的元素中加载结果数据。

您应该删除自定义 JavaScript 代码,使用内置的 ajax 帮助程序并在 AjaxOptions 中指定 updateTargetID:

    @Ajax.ActionLink("Show the Privacy Policy", "PrivacyPolicy", null, new{id="privacyLink"}, new AjaxOptions {UpdateTargetId = "privacy"})

    <div id="privacy"></div>

编辑:添加有关 IsAjaxRequest() 的更多信息:

当您发出 Ajax 请求时,您应该将X-Requested-WithHTTP 标头设置为XMLHttpRequest'. Internally,IsAjaxRequest` 检查此标头的存在。

当您为此使用jQuery.Ajax或使用默认的 Ajax-helpers 时,将包含此标头。如果您使用jQuery.load()此标头,则不包括在内。jQuery.load 不允许设置自定义标头。

编辑 为了使用 Ajax.ActionLink,您需要包含不显眼的 ajax 库并在 web.config 中启用它:

<configuration>
    <appSettings>
        <add key="UnobtrusiveJavaScriptEnabled" value="true"/>
    </appSettings>
</configuration>

除了设置标志之外,您还需要包含用于不显眼的 Ajax 和 jQuery ( ~/Scripts/jquery.unobtrusive-ajax.js) 的 MVC 插件。

于 2013-05-15T10:23:09.313 回答
0

IIRCevent是保留字。试试这样:

$('#privacyLink').click(function (e) {
    e.preventDefault();
    var url = $(this).attr('href');
    $('#privacy').load(url);
});

或者:

$('#privacyLink').click(function () {
    var url = $(this).attr('href');
    $('#privacy').load(url);
    return false;
});

也不要忘记在你的脚本之前AjaxDemo.js包含 jQuery.js 。

于 2013-05-15T12:10:41.483 回答