首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在MVC中使用SelectList中的选定值来保留值时无用

在MVC中使用SelectList中的选定值来保留值时无用
EN

Stack Overflow用户
提问于 2017-02-07 16:52:19
回答 1查看 54关注 0票数 0

我试图让我的Html.DropDownList保留一些用户选择的值。

代码将使用SelectList中的选定值来保留值,以使下拉列表保留用户先前选择的值。该页面是在MVC环境下构建的。在尝试了一段时间后,我发现网页只能返回到其原始状态(在用户选择任何内容之前),但在按下提交按钮后无法保留任何下拉列表值。

我还使用jQuery来控制多个下拉列表的显示和隐藏,我只需要一个组下拉列表就可以显示,并且当值被选中时显示另一个下拉列表(零售,公交车,自行车,轨道等)。是组dropdownlist的值和附加dropdownlist的名称)。

下面是我的代码:控制器:

代码语言:javascript
复制
public List<SelectListItem> SetGroup(string group)
        {
            List<SelectListItem> groups = new List<SelectListItem>();
            groups.AddRange(new SelectList(GMManager.FindAllGroup(), "MerchantNo", "MerchantName", group));
            groups.Add(new SelectListItem() { Text = "ALL", Value = "ALL", Selected = false });
            return groups;

        }

        public List<SelectListItem> SetRetail(string retail)
        {
            List<SelectListItem> retails = new List<SelectListItem>();
            retails.AddRange(new SelectList(GMManager.FindAllRetail(), "MerchantNo", "MerchantName",retail));
            retails.Add(new SelectListItem() { Text = "ALL", Value = "ALL", Selected = false });
            return retails;

        }

        public List<SelectListItem> SetBus(string bus)
        {
            List<SelectListItem> buses = new List<SelectListItem>();
            buses.AddRange(new SelectList(GMManager.FindAllBus(), "MerchantNo", "MerchantName",bus));
            buses.Add(new SelectListItem() { Text = "ALL", Value = "ALL", Selected = false });
            return buses;

        }

        public List<SelectListItem> SetBike(string bike)
        {
            List<SelectListItem> bikes = new List<SelectListItem>();
            bikes.AddRange(new SelectList(GMManager.FindAllBike(), "MerchantNo", "MerchantName",bike));
            bikes.Add(new SelectListItem() { Text = "ALL", Value = "ALL", Selected = false });
            return bikes;

        }

        public List<SelectListItem> SetTrack(string track)
        {
            List<SelectListItem> tracks = new List<SelectListItem>();
            tracks.AddRange(new SelectList(GMManager.FindAllTrack(), "MerchantNo", "MerchantName",track));
            tracks.Add(new SelectListItem() { Text = "ALL", Value = "ALL", Selected = false });
            return tracks;

        }

        public List<SelectListItem> SetParking(string parking)
        {
            List<SelectListItem> parkings = new List<SelectListItem>();
            parkings.AddRange(new SelectList(GMManager.FindAllParking(), "MerchantNo", "MerchantName",parking));
            parkings.Add(new SelectListItem() { Text = "ALL", Value = "ALL", Selected = false });
            return parkings;

        }

        public List<SelectListItem> SetOutsourcing(string outsourcing)
        {
            List<SelectListItem> outsourcings = new List<SelectListItem>();
            outsourcings.AddRange(new SelectList(GMManager.FindAllOutsourcing(), "MerchantNo", "MerchantName",outsourcing));
            outsourcings.Add(new SelectListItem() { Text = "ALL", Value = "ALL", Selected = false });
            return outsourcings;

        }  


public ActionResult RPT_160501()
        {
           string start = DateTime.Now.ToString("yyyyMMdd");
            string end = DateTime.Now.ToString("yyyyMMdd");
            string group = "";
            string retail = "";
            string bus = "";
            string bike = "";
            string track = "";
            string parking = "";
            string outsourcing = "";

            DataTable dt = null;



                if (Request.Form["searchConfirm"] != null || Request.Form["ExportExcel"] != null)
                {
                    start = Request.Form["startDate"];
                    end = Request.Form["endDate"];

                    group = Request.Form["group"];
                    retail = Request.Form["retail"];
                    bus = Request.Form["bus"];
                    bike = Request.Form["bike"];
                    track = Request.Form["track"];
                    parking = Request.Form["parking"];
                    outsourcing = Request.Form["outsourcing"];
                }

                ViewBag.Group = SetGroup(group);
                ViewBag.Retail = SetRetail(retail);
                ViewBag.Bus = SetBus(bus);
                ViewBag.Bike = SetBike(bike);
                ViewBag.Track = SetTrack(track);
                ViewBag.Parking = SetParking(parking);
                ViewBag.Outsourcing = SetOutsourcing(outsourcing);

                ViewBag.RepName = "ReportName";
                ViewBag.Start = start;
                ViewBag.End = end;

查看:

代码语言:javascript
复制
<script>
    $(document).ready(function () {
        $("#retail").hide();
        $("#bus").hide();
        $("#bike").hide();
        $("#track").hide();
        $("#parking").hide();
        $("#outsourcing").hide();
        $("#group").on("change", function () {
            switch ($(this).val()) {
                case "RETAIL":
                    $("#retail").show();
                    $("#bus").hide();
                    $("#bike").hide();
                    $("#track").hide();
                    $("#parking").hide();
                    $("#outsourcing").hide();
                    break;
                case "BUS":
                    $("#retail").hide();
                    $("#bus").show();
                    $("#bike").hide();
                    $("#track").hide();
                    $("#parking").hide();
                    $("#outsourcing").hide();
                    break;
                case "BIKE":
                    $("#retail").hide();
                    $("#bus").hide();
                    $("#bike").show();
                    $("#track").hide();
                    $("#parking").hide();
                    $("#outsourcing").hide();
                    break;
                case "TRACK":
                    $("#retail").hide();
                    $("#bus").hide();
                    $("#bike").hide();
                    $("#track").show();
                    $("#parking").hide();
                    $("#outsourcing").hide();
                    break;
                case "PARKING_LOT":
                    $("#retail").hide();
                    $("#bus").hide();
                    $("#bike").hide();
                    $("#track").hide();
                    $("#parking").show();
                    $("#outsourcing").hide();
                    break;
                case "BANK_OUTSOURCING":
                    $("#retail").hide();
                    $("#bus").hide();
                    $("#bike").hide();
                    $("#track").hide();
                    $("#parking").hide();
                    $("#outsourcing").show();
                    break;
                default:
                    $("#retail").hide();
                    $("#bus").hide();
                    $("#bike").hide();
                    $("#track").hide();
                    $("#parking").hide();
                    $("#outsourcing").hide();
                    break;
            }
        })
    })

</script>


<meta name="viewport" content="width=device-width" />
<title>@ViewBag.RepName</title>

<h2>@ViewBag.RepName</h2>



@using (Html.BeginForm("RPT_160501", "ReportSystem", FormMethod.Post, new { id = "searchForm" }))
{
    <div>
        <label for="startDate"> Date:</label>
        <input type="text" name="StartDate" id="StartDate" value="@ViewBag.Start" style="width:100px;" /> ~
        <input type="text" name="EndDate" id="EndDate" value="@ViewBag.End" style="width:100px;" />


        @Html.DropDownList("group", (IEnumerable<SelectListItem>)ViewBag.Group, "--Please Choose--")
        @Html.DropDownList("retail", (IEnumerable<SelectListItem>)ViewBag.Retail, "--Please Choose--")
        @Html.DropDownList("bus", (IEnumerable<SelectListItem>)ViewBag.Bus, "--Please Choose--")
        @Html.DropDownList("bike", (IEnumerable<SelectListItem>)ViewBag.Bike, "--Please Choose--")
        @Html.DropDownList("track", (IEnumerable<SelectListItem>)ViewBag.Track, "--Please Choose--")
        @Html.DropDownList("parking", (IEnumerable<SelectListItem>)ViewBag.Parking, "--Please Choose--")
        @Html.DropDownList("outsourcing", (IEnumerable<SelectListItem>)ViewBag.Outsourcing, "--Plase Choose--")

        <input type="submit" name="searchConfirm" value="Search" class="btn btn-default" />
        <input type="submit" name="ExportExcel" value="Export Excel" class="btn btn-default" />
    </div>
}
<table class="grid" width="100%">
    <thead>
        <tr style="background-color: lightgray">
            <th>
                A
            </th>
            <th>
                B
            </th>
            <th>
                C
            </th>
            <th>
                D
            </th>


        </tr>
    </thead>
    <tbody>
EN

回答 1

Stack Overflow用户

发布于 2017-02-07 17:10:28

您没有按照预期使用MVC。操作方法MVC应该有一个强类型的ViewModel对象作为参数,允许RPT_160501解析和绑定发布的表单值,而不是您自己做这一切。

同样的道理也适用于视图,它似乎也没有@model声明,因为ViewBag用于所有东西。

在解析和绑定的同时,MVC还会填充全局ModelState对象,MVC还会在内部使用该对象来呈现已发送或尝试的值,只要你使用Html.DropDownListFor(m => m.group, ....) <--这是我对你的问题的回答,但它只有在你整体上采用这种方法时才有效。

当然有一些方法可以在不使用ViewModel的情况下完成所需的工作,但这只会让您在错误的道路上走得更远。最好停在这里,学习正确的方法,然后更轻松地继续进行。

例如,有关此问题的更多信息,请参阅此问题:MVC ViewModel example

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42085408

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档