2010-03-01 60 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