2010-03-01 147 views
2

ASP.NET MVCASP.NET MVC刷新usercontrols

我有一个页面Index.aspx我将两个usercontrols加载到div中。这工作正常。目前,用户控件只显示数据,而且工作正常。但是现在我想在usercontrols中添加一个删除函数,然后在Index.aspx页面中刷新div。这可能吗?

的Index.aspx

<!-- Panel One --> 
<div id="panel1"> 
    <img src="/Content/ajax-loader.gif" alt="Loading..." /> 
</div> 

<script type="text/javascript"> 
    $('#panel1').load('../Reports/ReportOne') 
</script> 

<!-- Panel Two --> 
<div id="panel2"> 
    <img src="/Content/ajax-loader.gif" alt="Loading..." /> 
</div> 

<script type="text/javascript"> 
    $('#panel2').load('../Reports/ReportTwo') 
</script> 

ReportOne.ascx和ReportTwo

刚上市有一个foreach一些数据。这里我想为列表中的每个项目添加一个删除按钮。

回答

0

让你的“删除”操作弄成这个样子:

[AcceptVerbs(HttpVerbs.Post), ValidateAntiForgeryToken] 
    public ActionResult Delete(int id) { 
     try { 
      // do what ever here in deleting the record etc 
      // ... 

      return null; 
     } catch (Exception ex) { 
      TempData[TempDataKeys.ErrorMessage] = "Error in deleting: " + ex.Message; 
      return RedirectToAction("List"); 
     } 
    } 

在您ASCX/ASPX,创建一个jQuery的方法来包装你的AJAX调用控制器:

function deleteRecord(recordId) { 
    if (confirm("Are you sure that you want to delete this record?")) { 
     var token = $("input[name='__RequestVerificationToken']")[0].value; 
     url = '<%= Url.Action("Delete", "MyController") %>'; 

     $.post(
      url, 
      { id: recordId, __RequestVerificationToken: token }, 
      function(data) { 
       if (!data == "") { 
        // success - reload/refresh panel control 
        $('#panel1').load('../Reports/ReportOne'); 
       } else { 
        // failed - handle error 
       } 
      } 
     ); 
    } 
} 

你需要把您的AntiForgeryToken适当,以便脚本可以访问它 - 您只需要1整个页面。然后,您删除链接应该打电话给JavaScript,而不是在直接控制器的操作:

<a href="javascript:deleteRecord('<%=recordId%>');">Delete</a> 
+0

var var token = $(“input [name ='__ RequestVerificationToken']”)[0] .value;在javascript中产生一个错误(noi对象)。它是什么? – karl 2010-03-02 09:01:32

+0

这应该查询您的AntiForgeryToken值 - 如果您正在使用它。如果是这种情况,当然你需要把AntiForgeryToken放在页面/控件的某个地方。如果你不使用它,你可以删除该行和相关的操作过滤器。 – 2010-03-02 14:56:42

-1

需要修改用户控制

0

当用户点击删除按钮的用户控件中,你可以调用该会从数据库中删除了必要信息的行为,并返回刷新的局部视图控制。这样就把删除链接的控件中:

<%= Html.ActionLink("Delete", "DeleteReportOne", null, new { id = "deleteReportOne" }) %> 

,然后在主网页内注册这个链接点击回调:

$(function() { 
    $('#deleteReportOne').click(function() { 
     $('#panel1').load(this.href); 
    }); 
}); 
+0

当我试图返回我的部分观点我离开炫魅并转到该视图,而不是只刷新它。 public ActionResult ReportOne() Thread.Sleep(1000); ViewData [“updateText”] =“”; return View(); } public PartialViewResult UpdateReportOne(){ Thread.Sleep(2000); ViewData [“updateText”] =“确认更新”; return PartialView(“ReportOne”); } 这应该怎么做? – karl 2010-03-01 12:58:51