asp.net-mvc - 页面刷新后下拉列表值返回---select---

标签 asp.net-mvc asp.net-mvc-3 razor html.dropdownlistfor html-select

因此,在我的应用程序中,用户将从下拉列表中选择一个名称,单击“查看”,相应的值将显示在页面上。

然后使用超链接按升序对列表进行排序。为此,页面会刷新并显示列表的新顺序。

下拉列表的值返回到其原始值“select”,而不是保留所选人员的姓名。

我的模型:

public class HolidayList
    {
        public List<Holiday> HList4DD { get; set; }
        public List<Person> PList4DD { get; set; }

        public int currentPersonID { get; set; }
        public IEnumerable<SelectListItem> Categories { get; set; }

        public HolidayList()
        {
            HList4DD = new List<Holiday>();
            PList4DD = new List<Person>();
            }
        }
    }

我的 Controller :

 [HttpPost]
        public ViewResult Index(int HolidayDate)
        {
            var holidays = db.Holidays.Include("Person");

            HolidayList model = new HolidayList();

            model.currentPersonID = HolidayDate;
            model.PList4DD = db.People.ToList();           
            model.Categories = holidays.Select(x => new SelectListItem
                                            {
                                                Value = x.Id.ToString(),
                                                Text = x.Person.Name
                                            }
                                          );


            int data = HolidayDate;

            model.HList4DD = db.Holidays.Where(h => h.PersonId == HolidayDate).ToList();      

            return View(model);

        }

        [HttpGet]
        public ViewResult Index(string sortOrder, int? currentPersonID)
        {
            var holidays = db.Holidays.Include("Person");

            HolidayList model = new HolidayList();

            //not null
            if (currentPersonID.HasValue)
            {
                model.currentPersonID = currentPersonID.Value;

            }
            else
            {
                model.currentPersonID = 0;
            }

            model.PList4DD = db.People.ToList();

            ViewBag.NameSortParm = String.IsNullOrEmpty(sortOrder) ? "date" : "";
            var dates = from d in db.Holidays
                        where d.PersonId == currentPersonID.Value
                        select d;

            switch (sortOrder)
            {
                case "date":
                    dates = dates.OrderBy(p => p.HolidayDate);
                    break;
            }

            model.HList4DD = dates.ToList();

            return View(model);
        }

我的看法

我在这里尝试了许多不同的尝试,以下代码有效,但存在下拉列表问题

@Html.DropDownListFor(model => model.HList4DD.First().HolidayDate,
                                new SelectList(Model.PList4DD, "Id", "Name"),
                               // Model.currentPersonID
                                "---Select---"
                                )  *@

我尝试解决这个问题是:

 @Html.DropDownList("HolidayDate", Model.Categories, "---Select---")

 @Html.DropDownListFor("HolidayDate", x => x.HolidayDate, Model.Categories)

非常感谢任何帮助

最佳答案

您将 DropDownFor 绑定(bind)到了错误的属性。 基本上,您想要做的是在模型中创建一个新属性来绑定(bind)下拉列表中选择的值。

public int SelectedDate {get;set;}

然后在你的代码前面你想使用 dropdownFor 来绑定(bind)像这样的属性

@Html.DropDownListFor(model => model.SelectedDate ,
   new SelectList(Model.PList4DD, "Id", "Name"),
   // Model.currentPersonID
   "---Select---"
)  

不是这个。

 @Html.DropDownListFor(model => model.HList4DD.First().HolidayDate ,
   new SelectList(Model.PList4DD, "Id", "Name"),
   // Model.currentPersonID
   "---Select---"
)  

最后,在您想要进行排序的操作中,您需要将 SelectedDate 传递到操作中。然后在返回它之前,将其分配给模型。整个事情将会像魔法一样进行。

关于asp.net-mvc - 页面刷新后下拉列表值返回---select---,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13649739/

相关文章:

c# - 根据值选中或取消选中复选框?

jquery - 让 jquery 运行 : 'Object Expected' error

asp.net-mvc - ASP.NET MVC 3 最佳实践/设计

c# - MVC3 Layout Page、View、RenderPartial 和获取脚本文件到 Header(从局部 View )

asp.net-mvc - 如何在ASP.NET MVC中定义 View 级变量?

c# - Razor 试图显示带有重音符号的文本

asp.net-mvc - 回发 MVC Razor View 中项目列表中单击的行

c# - 尝试单元测试时如何触发 Initialize 方法?

asp.net-mvc - Spark View 引擎和 Visual Studio

c# - Razor 页面中 VB.NET 的 @@<text> 标签问题