2009-08-18 77 views
0

- 在ASP.NET MVC和jQuery一起运行 -部分视图可否在没有回传的情况下重新渲染?

我使用jQuery将<LI>块渲染为下拉菜单项列表。如果用户没有登录,那么在该列表中有3个项目 - 如果他已经登录,则有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; 
    }); 
}); 
+0

你有没有考虑过使用updatepanel?虽然updatepanels被称为“缓慢”,但使用firebug可以查看实际返回的数据量。它可能很小,但它应该可以帮助您节省大量的时间和检查页面生命周期 – 2009-08-19 00:30:41

回答

1

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

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

  1. 用户输入凭据并单击登录。
  2. 服务器检查它们和:
    1. 如果正确 - 呈现部分视图(所以结果是HTML)。
    2. 如果没有 - 与错误的描述等
  3. 在客户端呈现JSON - 如果内容是HTML - 然后将其设置为徘徊无论它是必要的。
  4. 如果内容是JSON - 向用户显示错误并进一步分析结果。

那么你的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; 
}); 

});

0

那么如果Ajax请求是返回包括showLoginStatus内容的局部视图?

即有ajax调用返回PartialView(.ascx)并且该部分视图由showLoginStatus视图和您需要的任何额外标记组成的操作。

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

相关问题