c# - 如何更新多个部分 View (一个主网格和另一个总计网格)?

标签 c# asp.net asp.net-mvc jquery

我的主索引页面上有两个带有过滤器下拉列表的部分 View 。一个部分 View 用于显示 emp 列表,另一个 View 用于汇总 emp.salary 等。目前,当选择过滤器下拉列表时,我可以通过 ajax 更新我的主 emp 网格。问题是,每次将新过滤器应用于主 emp 网格时,我的汇总网格都需要重新计算,而我不知道如何处理。

这里是较少细节 View 模型的代码:

Controller :Person/Index()

// GET: /Person/
public ViewResult Index()
{
   IList<Person> ppl = cs = db.Persons.ToList();

   PersonRollup pr= new PersonRollup();            
   foreach (Person p in ppl)
   {
      pr.salary += ii.salary
   }
   PersonViewModel pvm = new PersonViewModel{Persons = ppl, PersonsRollup = pr}
   return View(pvm);
}

查看:人物/索引

@model Models.PersonVM>

@Html.ListBox("Filter")  

<div id="PersonRollupGrid">@Html.Partial("_PersonsRollup", Model.PersonsRollup)</div>

<div id="PersonGrid">@Html.Partial("_Persons", Model.Persons)</div>  

@* Filter selected from drop down *@
<script type="text/javascript">
    $("select").multiselect({
        click: function () {
            $.get('@Url.Action("FilterPersons")', function (data) {
                $('#PersonGrid').html(data);
            });
            // ???????????????????????????????????????????
            //   How can I update the rollup grid here....
            //???????????????????????????????????????????
            }
        });
</script>

共享 View :_Persons

@model IEnumerable<Models.Person>

<table>
    <tr>
        <th>Name</th>
        <th>Salary</th>
    </tr>

    @foreach (var item in Model) {
    <tr>
        <td>@item.name</td>
        <td>@item.salary</td>
    </tr>
</table>

共享 View :_PersonsRollup

@model Models.PersonRollup

<table>
    <tr>
        <th>TotalSalary</th>
    </tr>
    <tr>
        <td>@model.salary</td>
    </tr>
</table>

Controller :过滤器

  public ActionResult FilterPersons(string someFilteredData)
  {
    IList<Person> ppl = cs = db.Persons.Where(/*someFilteredData*/).ToList();

   PersonRollup pr= new PersonRollup();            
   foreach (Person p in ppl)
   {
      pr.salary += ii.salary
   }
   PersonViewModel pvm = new PersonViewModel{Persons = ppl, PersonsRollup = pr}

   return PartialView("_Persons", ppl.Persons);
  }

最佳答案

 //get the filtered viewmodel data
 $.get('@Url.Action("FilterPersons")', function (data) { 
      //pass viewmodel to get rendered view             
      $("#PersonGrid").load("/Person/GetPersonsView"
         data.Persons, function () {
           //callback
      });
      //pass viewmodel to get rendered view       
      $("#PersonRollupGrid").load("/Person/GetPersonsRollUpView",
         data.PersonsRollup, function () {
           //callback
      });

 });


  public ActionResult FilterPersons(string someFilteredData)
  {
       ....
       return JsonResult(pvm, JsonRequestBehavior.AllowGet);
  }

  public ActionResult GetPersonsView(Persons persons)
  {   
      return PartialView("_Persons", persons);
  }

  public ActionResult GetPersonsRollUpView(PersonRollup personRollup)
  {   
      return PartialView("_PersonsRollUp", personRollup);
  }

关于c# - 如何更新多个部分 View (一个主网格和另一个总计网格)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8409814/

相关文章:

c# - 用户 Azure 登录失败? System.Data.SqlClient.SqlException

c# - 将数据从一个页面传递到另一个页面的方法

c# - SendGrid 给邮件添加类别

c# - 内联 block 不工作的CSS

c# - 为什么 Task.WhenAll 不工作?

c# - 如何最好地扩展 INotifyPropertyChanged 的​​部分类?

c# - 在桌面和 Web 应用程序之间交换数据的最佳实践

asp.net - 在 DotNetNuke 中使用 jQuery UI 日期选择器代替 Telerik RadCalendar

c# - 如何加载独立于 site.master 的 View ?

asp.net - 如何将错误从一个操作传递到另一个操作