2016-02-12 52 views
3

我有一个操作从2 DropDownLists采取参数的操作家庭控制器。 我的目标是坚持从每个dropDownList中选择的值,以便每当调用操作时定义两个参数。 我的问题是,每次我选择DropDownLists的任何一个新的值时,另一个的值被重置。控制器采取2下拉列表中的值的操作

控制器:

public ActionResult Results (int? PageSize,int? RaceId, int page = 0) 
     {      
      ///code that uses PageSize and RaceId to get data from DB    
     } 

public ActionResult _SelectRaces(int id=3) 
     {   
      var results = db.Races.Where(r => r.Event_Id == id); 
      if (results == null) 
      { 
       return HttpNotFound(); 
      } 
      List<SelectListItem> items = new List<SelectListItem>(); 
      foreach (var r in results.ToList()) 
      { 
       items.Add(new SelectListItem { Text = r.Name, Value = r.id.ToString() }); 
      } 

      ViewData["Race"] = items; 
      return PartialView(results.ToList()); 
     } 

public ActionResult _SelectPageSize() 
     { 
      List<SelectListItem> items = new List<SelectListItem>(); 
      items.Add(new SelectListItem { Text = "5", Value = "5" }); 
      items.Add(new SelectListItem { Text = "10", Value = "10" }); 
      items.Add(new SelectListItem { Text = "25", Value = "25" }); 

      ViewData["PageSize"] = items; 
      return PartialView(items); 
     } 

查看:

_SelectRaces.cshtml

@using (Html.BeginForm()) 
{ 
    <fieldset> 
     Select Race 
     @Html.DropDownList("RaceId", ViewData["Race"] as List<SelectListItem>, new { style = "width: 150px;", onchange = "this.form.submit()" }) 
    </fieldset> 
} 

_SelectPAgeSize.cshtml

@using (Html.BeginForm()) 
{ 
    <fieldset> 
     Select Page Size 
     @Html.DropDownList("PageSize", ViewData["PageSize"] as List<SelectListItem>, new { style = "width: 50px;", onchange = "this.form.submit()" }) 
    </fieldset> 
    ViewBag.PAge = "Page"; 
} 
在控制器

IndexViewModel.cs

public class IndexViewModel 
{ 
    public IList<SelectListItem> Races { get; set; } 
    public int raceSelected { get; set; } 
    public IList<SelectListItem> PageSize { get; set; } 
    public int pageSizeSelected { get; set; } 
} 

Index.cshtml

@Html.Action("_SelectPageSize")<!--Select Page Size--> 
    @Html.Action("_SelectRaces") <!--Select Race--> 
    @Html.Action("Results") 
+0

使用AJAX这个 –

+0

有点不清楚你想要什么实现。您没有显示POST方法。我假设你想重定向到'Results'并将'PageSize'和'RaceId'传递给它?如果要保留这些值,请使用具有这些值属性的视图模型,并在调用Html时将视图模型返回到“Index.cshtml”方法并将其传递给“_SelectPageSize”和“_SelectRaces”方法。行动()'。然后为其他属性生成一个隐藏的输入。 –

回答

0

在这种情况下,我使用的视图模型和局部视图:

public ActionResult Index() 
    { 
     var results = db.Races.Where(r => r.Event_Id == id); 
     if (results == null) 
     { 
      return HttpNotFound(); 
     } 
     var items = new List<SelectListItem>(); 
     foreach (var r in results.ToList()) 
     { 
      items.Add(new SelectListItem { Text = r.Name, Value = r.id.ToString() }); 
     } 
     var pageSizes = new List<SelectListItem>(); 
     pageSizes.Add(new SelectListItem { Text = "5", Value = "5" }); 
     pageSizes.Add(new SelectListItem { Text = "10", Value = "10" }); 
     pageSizes.Add(new SelectListItem { Text = "25", Value = "25" }); 

     var model = new IndexViewModel() 
     { 
      Races = items, 
      PageSize = pageSizes 
     }; 
     return View(model); 
    } 

在指数:

@this.model IndexViewModel 
    @{ Html.RenderPartial("_SelectPageSize", this.Model); }<!--Select Page Size--> 
    @{ Html.RenderPartial("_SelectRaces", this.Model); } <!--Select Race--> 
    @{ Html.RenderPartial("Results", this.Model); } 

_SelectRaces.cshtml(例如)和_SelectPAgeSize:

@this.model IndexViewModel 

    <fieldset> 
      Select Race 
      @Html.DropDownListFor(x=>x.raceSelected, this.model.Races, new { style = "width: 150px;", onchange = "this.form.submit()" }) 
     </fieldset> 

在提交方法

public ActionResult Results (IndexViewModel model) 
      { 
var raceId = model.raceSelected; 
var pageSize = model.pageSizeSelected; 

       ///code that uses PageSize and RaceId to get data from DB    
      } 
相关问题