2

したがって、私のアプリケーションでは、ユーザーはドロップダウン リストから名前を選択し、[表示] をクリックすると、対応する値がページに表示されます。

次に、ハイパーリンクを使用して、リストを昇順に並べ替えます。これを行うには、ページが更新され、リストの新しい順序が表示されます。

ドロップダウン リストの値は、選択された人物の名前のままではなく、元の値の '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)

どんな助けでも大歓迎です

4

1 に答える 1

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

最後に、並べ替えを実行するアクションで、SelectedDate をアクションに渡す必要があります。次に、それを返す前に、モデルに割り当てます。そして、すべてが魔法のように機能します。

于 2012-12-06T23:41:06.540 に答える