2009-11-27 74 views
1

我想要以某种方式执行一些ajax调用。asp.net mvc complex ajax更新

我有一个页面。在这个页面中有2个ViewUserControls,比如说control1和control2。

控制1具有调用控制2这样Ajax.ActionLinks的列表:

<%= Ajax.ActionLink(page.Name, "PageDetails", new { pageSysName = page.SysName }, new AjaxOptions { UpdateTargetId = "pageEdit" })%> 

控制2有一个Ajax形式更新的罚款。该Ajax.BeginForm方法是这样的:

Ajax.BeginForm("SavePage", "Admin", new AjaxOptions { UpdateTargetId = "pageEditUpdated" }) 

当用户点击保存按钮,它目前正在更新一个名为pageEditUpdated一个基本的内容(“更新”)的返回类型从控制器股利。

我难以忍受的部分是如何更新control2以反映新的变化。总结一下,页面有2个控件。我想让control2刷新自己,并更新div以通知用户更新已执行。

回答

2

让您的SavePage方法返回一个反映更新后的表单内容(包括更新消息)的部分。更新目标是表单的“内部容器”。

<% Ajax.BeginForm("SavePage", "Admin", new AjaxOptions { UpdateTargetId = "innerForm" }) { %} 
    <div id="innerForm"> 
    <% Html.RenderPartial("EditPageContents") %> 
    </div> 
<% } %> 

你攒动应然后返回

updatedModel.UpdateMessage = "updated"; 
return PartialView("EditPageContents", updateModel); 

,你的部分观点应该有

<% if (!string.IsNullOrEmpty(UpdateMesage)) { %> 
    <%= Html.Encode(UpdateMessage) %> 
<% } %> 

老实说,虽然,这将使用jQuery通过发布形式是一个容易得多AJAX:

$(function() { 
    $('form').submit(function() { 
     $.post($(this).attr('action'), $(this).serialize(), function(data) { 
      $('#updateMessage').html(data).show(); 
     }); 
     return false; 
    }); 
}); 
+0

欢呼的答案。 我还没有尝试过jQuery版本。我需要了解更多关于jquery的知识才能弄清楚这一部分。 –

0

我不得不第二个tvanfosson的评论(我会为他投票,但我的声望显然还不够高)。无论如何,当我将Ajax功能与我的MVC网站集成时,我发现Microsoft提供的Ajax方法相当笨拙。所以我转而使用jQuery.form插件(很好的例子here)。我发现它使事情变得更容易。我刚刚创建了页面部分的MVC用户控件,我想成为ajax,并且只是重新加载该用户控件作为必要条件。