过滤结果而不重新获取数据

时间:2014-12-03 21:27:00

标签: asp.net-mvc

我想创建一个网页,允许用户显示来自外部服务的过滤结果集。服务很慢,数据以xml块的形式返回,然后我必须解析。我非常想避免多次获取和解析这些数据,但我无法弄清楚如何在获取数据后将过滤字符串应用于数据。

以下是我到目前为止的部分(显着简化)。

控制器:

public ActionResult Index() {
  List<ComplexObject> objList = FetchAndParseNastyXMLData();
  HandyViewModel vm = new HandyViewModel(objList);
  return View(vm);
}

视图模型:

public class HandyViewModel(List<ComplexObject> objList) {
  public List<ComplexObject> AllObjects { get; private set; }
  public List<ComplexObject> FilteredObjects { get; private set; }
  ... //other handy properties

  public HandyViewModel(List<ComplexObject> objList) {
    AllObjects = objList;
    FilteredObjects = null;
  }

  public void ApplyFilter(string filter) {
    FilteredObjects = AllObjects.Where(r => r.filter_field == filter).ToList();
  }
}

查看:

@model ViewModels.HandyViewModel

<div>
  @using (Html.BeginForm("FilterList", "Controller")) {
    <fieldset id="Filters">
      <legend>Filter List</legend>
      <input type="text" name="FilterString" />
      <input type="submit" />
    </fieldset>
  }
</div>
<div>
  @foreach(ComplexObject o in Model.FilteredList) {
    <p>o.ToString()</p>
  }
</div>

我陷入了尝试处理表单提交的问题。我想我想向控制器添加另一个功能,但我无法弄清楚如何继续操作现有的对象列表。我可以以某种方式将该列表传递回Controller,以便我可以重复使用它吗?这就是我想要做的,但也许还有更好的方法......

public ActionResult FilterList(string FilterString) {
  //how do I get my List<ComplexObject> here without re-fetching and re-parsing the data?!
  HandyViewModel vm = new HandyViewModel(objList);
  vm.ApplyFilter(FilterString);
  return View(vm);
}

我已经在线挖掘了大量关于过滤器/结果页面的示例,但它们似乎都在应用过滤器时重新获取数据。

0 个答案:

没有答案