下拉列表值返回---选择---页面刷新后

时间:2012-11-30 17:06:14

标签: 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>();
            }
        }
    }

我的控制员:

 [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)

任何帮助非常感谢

1 个答案:

答案 0 :(得分:2)

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

public int SelectedDate {get;set;}

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

@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---"
)  

Finnaly,在您想要进行排序的操作中,您需要将SelectedDate传递给操作。然后在返回之前,将其分配给Model。而整个事情将像魔术一样发挥作用。