1

我需要在一个视图中重新填充一种过滤器,在该视图中我不能使用模型来执行此操作(已经使用模型来带来一个对象的 IEnumerable,以便创建一个表)。

如何填写过滤器输入,这样用户就不必自己动手了?

我正在使用 ASP.NET MVC3。

图形示例,因此更清楚:

public ViewResult Consulta(string dominio, string cliente, DateTime?
desde, DateTime? hasta, int? estado, string origen, int? reclamoid)
{
    var reclamos = db.Reclamos.Where(/*Apply filters, etc*/);
    return View(reclamos.ToList());
}

正如你所看到的,这些太多了,不能只为每个过滤器使用一个 ViewBag,所以我想知道是否有办法以复数方式做到这一点。

提前致谢。

4

2 回答 2

3

我知道您说没有使用模型,但您的理由是您当前的模型是表格的 IEnumerable。为什么不创建一个视图模型,将当前的 IEnumerable 作为属性以及您需要的其余属性?比使用 ViewBag 更好的做法。

就像是:

public class MyViewModel
{
    public IEnumerable<RowData> TableRows { get; set; } //your table rows
    public string Dominio { get; set; }
    public string Cliente { get; set; }
    public DateTime? Desde { get; set; }
    public int? Estado { get; set; }
    public string Origen { get; set; }
    public int? Reclamoid { get; set; } 
}

然后在您的视图中将您的模型声明为:

@model MyViewModel

然后你可以在视图中做:

@Html.EditorFor(m => m.Dominio)
//then editors for the rest of the model fields

//then you can populate your tablerows using Model.TableRows
于 2012-04-12T17:55:05.937 回答
3

Mattytommo 有一个如何创建一个新的复杂模型的例子,但我还有另外两种方法。

首先是创建一个定义更好的复杂模型,因为这为您提供了一个更明确的模型。它包含您的过滤器和孤立的结果。

 public class MyFilterModel
 {
     public string Dominio { get; set; } 
     public string Cliente { get; set; } 
     public DateTime? Desde { get; set; } 
     public int? Estado { get; set; } 
     public string Origen { get; set; } 
     public int? Reclamoid { get; set; }  
 }

 public class MyViewModel
 {
      public MyFilterModel Filters {get;set;}
      public IEnumerable<DataRow> Results {get;set;}
 }

另一种选择是保留现有模型,但使用 ViewBag 或 ViewData 来传递过滤器模型:

 public class MyFilterModel
 {
     public string Dominio { get; set; } 
     public string Cliente { get; set; } 
     public DateTime? Desde { get; set; } 
     public int? Estado { get; set; } 
     public string Origen { get; set; } 
     public int? Reclamoid { get; set; }  
 }

在您的控制器中

 public ViewResult Consulta(MyFilterModel filters)  
 {  
      ViewBag.Filters = filters;
     var reclamos = db.Reclamos.Where(/*Apply filters, etc*/);  
     return View(reclamos.ToList());  
 } 

在你看来

 @model MyViewModel
 @{
      MyFilterModel filters = ViewBag.Filters as MyFilterModel;
 }

 @Html.EditorFor(m => filters.Dominio) 
于 2012-04-12T18:03:46.970 回答