2010-03-01 4 views
2

ASP.NET MVCASP.NET MVC обновить элементы управления UserControl

У меня есть одна страница index.aspx где я загружаю два UserControls в дивы. Это работает нормально. На данный момент usercontrols просто показывает данные, и это работает нормально. Но теперь я хочу добавить функцию delete в usercontrols, а затем обновить div на странице Index.aspx. Это возможно?

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

Просто перечисляя некоторые данные с Еогеасп. Здесь я хочу добавить кнопку удаления для каждого элемента в списках.

ответ

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 token = $ ("input [name = '__ RequestVerificationToken']") [0] .value; сгенерируйте ошибку (объект noi) в javascript. Что это? – karl

+0

Это должно запрашивать ваше значение AntiForgeryToken - если вы его используете. Если это так, конечно, вам нужно поместить AntiForgeryToken где-нибудь в вашу страницу/элемент управления. Если вы НЕ используете его, вы можете удалить эту строку и связанный с ней фильтр действий. –

-1

вам нужно изменить ваш пользователь управляет

0

Когда пользователь нажимает на кнопку удаления в элементе управления пользователя вы можете ссылаться на действие, которое удалит всю необходимую информацию из базы данных и возвращать частичный вид освежающий контроль. Так поставить ссылку удалить внутри управления:

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

, а затем внутри главной страницы регистрации кликов обратного вызова для этой ссылки:

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

Когда я пытаюсь вернуть свой частичный вид я оставляю MainPage и перейти на эту точку зрения, а не просто обновить его. Публичный ActionResult ReportOne() { Thread.Sleep (1000); ViewData ["updateText"] = ""; return Вид(); } public PartialViewResult UpdateReportOne() { Thread.Sleep (2000); ViewData ["updateText"] = "Обновить подтверждено"; return PartialView («ReportOne»); } Как это сделать? – karl

Смежные вопросы