在ajax调用中重定向到另一个页面

时间:2018-09-19 09:23:05

标签: ajax asp.net-mvc

你好, 我有菜单栏,当我在Ajax中单击“关于布局中的更改”时,单击body:

<div id="renderbody">@RenderBody()</div>

菜单栏:

    <li class="active menu-tab"><a href="#" id="Dashboard"><i class="icon icon-home"></i> <span>Dashboard</span></a> </li>
    <li class="menu-tab"> <a href="#" id="About"><i class="icon icon-signal"></i> <span>About</span></a> </li>

和JS:

$("#About").click(function () {
            $.ajax({
                url: '/Home/About',
                success: function (data) {
                    $("#renderbody").html(data);
                }
            })
        })

这是完美的作品,但是当我使用部分视图进行建模时,它却不起作用。

   <li class="menu-tab"> <a href="#" onclick="@Html.Partial("_MovesPages", new IndividualMenuButton { ID="About", url="About"})"><i class="icon icon-signal"></i> <span>About</span></a> </li>

模式-个人菜单按钮:

namespace XXX.Models
{
    public class IndividualMenuButton
    {
        public string ID { get; set; }
        public string Url { get; set; }

    }
}

和部分视图-_MovesPages:

@model XXX.Models.IndividualMenuButton
@section scripts
{
    <script>

        $("#@Model.ID").click(function () {
            $.ajax({
                url: '/Home/@Model.Url',
                success: function (data) {
                    $("#renderbody").html(data);
                }
            })
        })

    </script>
}

1 个答案:

答案 0 :(得分:1)

这不会呈现有效的事件处理程序。呈现的HTML看起来像

<li class="menu-tab"> <a href="#" onclick="<script>...</script>"><i class="icon icon-signal"></i> <span>About</span></a> </li>

onclick属性需要包含javascript代码,而不是HTML脚本块。也许更好的解决方案是将类用作选择器而不是部分选择器,并使用href属性保存URL。因此,类似:

<li class="menu-tab"> <a href="About"><i class="icon icon-signal"></i> <span>About</span></a> </li>

<script>
    $(".menu-tab").click(function (e) {
        e.preventDefault();
        var url = '/Home/' + $(this).attr('href');
        $.ajax({
            url: url,
            success: function (data) {
                $("#renderbody").html(data);
            }
        });
    });
</script>

请注意,您需要传递事件args(e)并调用e.preventDefault();以防止锚标记像通常那样执行导航,以便您可以进行ajax调用。 / p>