【问题标题】:Controller Action that takes values from 2 dropdownLists从 2 个下拉列表中获取值的控制器操作
【发布时间】:2016-02-12 12:04:15
【问题描述】:

我有一个动作 Home 控制器,它从 2 个 DropDownLists 中获取参数。 我的目标是保留每个 dropDownList 中的选定值,以便在调用操作时定义两个参数。 我的问题是,每次我为任何一个 DropDownLists 选择一个新值时,都会重置另一个的值。

控制器:

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";
}

索引.cshtml

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

【问题讨论】:

  • 有点不清楚你想要达到的目标。您还没有显示 POST 方法。我假设您想重定向回Results 并将PageSize 和RaceId 都传递给它?如果要保留这些值,则使用具有这些值的属性的视图模型,将视图模型返回到 Index.cshtml 方法,并在调用 Html.Action() 时将其传递给 _SelectPageSize 和 _SelectRaces 方法。然后为其他属性生成隐藏输入。

标签: c# asp.net-mvc html.dropdownlistfor


【解决方案1】:

在那种情况下,我使用了视图模型和部分视图:

例子:

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; }
}

在您的控制器中:

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             
            }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-13
    • 1970-01-01
    • 2015-02-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多