部分视图可以在没有回发的情况下重新渲染吗?

时间:2009-08-18 23:38:35

标签: jquery asp.net-mvc postback

- 在ASP.NET MVC中与jQuery一起运行 -

我正在使用jQuery将<LI>块渲染为下拉菜单项列表。如果用户没有登录,那么该列表中有3个项目 - 如果他__已登录,则有4个项目。第4项需要运行几个条件才能确切地确定它携带的有效负载所以我在.ascx中有该代码控制和主要页面调用:

<div id="loginBox">
    <% Html.RenderPartial("showLoginStatus"); %>
</div>

以决定如何渲染它。

只要我愿意等待基于AJAX的登录之后的回发,这一点就有用了。我现在需要做的是让代码在没有页面刷新的情况下运行。

显示登录按钮或用户名称的页面部分如下所示:

    var form = $("#loginForm");
    form.submit(function() {
        var data = form.serialize();
        $.post(form.attr("action"), data, function(result, status) {
            if (result.Success) {
                $(".showLoggedUser").html(result.UserName + '<br /><a href="/Admin/Account/LogOut">Log Out</a>');
                //how can I force the code contained in 'showLoginStatus.ascx' to render at this point?
                api.close();
            } else {
                $('.loginErrors').html(result.ErrorMessage);
            }
        }, "json");
        return false;
    });
});

2 个答案:

答案 0 :(得分:1)

您可以在结果中返回ShowLoginStatus.ascx的HTML(可能是JSON)。
Here是如何将视图渲染为字符串以实现这一点的。

另一种方法是根据结果从操作中返回不同的内容类型。

  1. 用户输入凭据并单击“登录”。
  2. 服务器检查它们并:
    1. 如果正确 - 渲染部分视图(结果是HTML)。
    2. 如果不是 - 使用错误描述等呈现JSON。
  3. 在客户端 - 如果内容是HTML - 然后将其设置为需要的时间。
  4. 如果内容是JSON - 向用户显示错误并进一步分析结果。
  5. 所以你的JavaScript看起来像:

    var form = $("#loginForm");
    form.submit(function() {
        var data = form.serialize();
        $.post(form.attr("action"), data, function(result, status) {
            // Write your isJson function to check the result type
            if (!isJson(result)) {
                $(".showLoggedUser").html(result);
                api.close();
            } else {
                $('.loginErrors').html(result.ErrorMessage);
            }
        }); // DO NOT SPECIFY RESULT TYPE
        return false;
    });
    

    });

答案 1 :(得分:0)

如果ajax请求是要返回包含showLoginStatus内容的部分视图呢?

即。有一个ajax调用它返回PartialView(.ascx)的动作,而Partial视图由showLoginStatus视图和你需要的任何额外标记组成。

也许看一下Ajax.ActionLink和AjaxOptions参数来获得其他一些想法?