Get下拉列表默认选择的项没有传递到Asp.net MVC中的控制器

本文关键字:net Asp MVC 控制器 默认 下拉列表 选择 Get | 更新日期: 2023-09-27 18:21:40

当用户(编辑事件)显示时间的下拉列表和日期的文本框时,我遇到了问题

但是当用户提交表单时,编辑操作在一段时间内没有收到旧值如果用户更改时间值,则此代码运行良好,它将获得该值。否则它不会

请帮帮我。

**代码**

Html.DropDownListFor(x=>x.StartTime, Model.Times,
Model.Appointment.StartDate.ToString("hh:mm tt"), new {@class = "dropdownlist" })
public ActionResult Edit(int id = 0){
    Appointment app = eventService.GetEventByID(id);
   EventViewModel model = new EventViewModel() 
    { Appointment =app,
     StartTime = app.StartDate.ToString("hh:mm tt"),
      EndTime = app.EndDate.ToString("hh:mm tt"),
      Times = TimesSelectListItem, };
// Get the time portion of our date/time from our drop down lists
   DateTime startTime = Convert.ToDateTime(model.StartTime);
   DateTime endTime = Convert.ToDateTime(model.EndTime);
 // Create a new date based on the date from our date picker, and time from our drop down lists:
model.Appointment.StartDate = new DateTime(model.Appointment.StartDate.Year, model.Appointment.StartDate.Month, model.Appointment.StartDate.Day, startTime.Hour, startTime.Minute, startTime.Second);
model.Appointment.EndDate = new DateTime(model.Appointment.EndDate.Year, model.Appointment.EndDate.Month, model.Appointment.EndDate.Day, endTime.Hour, endTime.Minute, endTime.Second);
 if (model == null)   {
  return HttpNotFound();   }
PopulatePriorityDropDownList(model.Appointment.FK_PriorityID);
 PopulatePrivacyDropDownList(model.Appointment.FK_PrivacyID);
PopulateTypeDropDownList(model.Appointment.FK_AppointmentTypeID);
       return View(model);
  }

   [HttpPost]
   [ValidateAntiForgeryToken]
   public ActionResult Edit(EventViewModel model, int id, string PriorityID, string PrivacyID, string TypeID)
            {
//------------
this is in the controler...
   IEnumerable<SelectListItem> TimesSelectListItem = new[] {
                new SelectListItem{ Text="6:00 AM", Value = "6:00 AM" },
                new SelectListItem{ Text="6:30 AM", Value = "6:30 AM" },....etc}

StartTime/StartTime:字符串,仅显示在视图中
StartDate/EndDate:db中的dateTime类型。

Get下拉列表默认选择的项没有传递到Asp.net MVC中的控制器

如果StartTime的值与SelectList中的某个属性不匹配,则select的值在回发时将为null,因为您在DropDownListFor()中使用了选项标签(这将呈现一个没有值的选项)。

检查StartTime的值是否与其中一个选项的值完全匹配。

如果您总是设置初始值,则删除DropDownListFor()方法的3参数

@Html.DropDownListFor(x=>x.StartTime, Model.Times, new {@class = "dropdownlist" })

否则,让它成为一条用户友好的消息,这样用户就可以清楚地选择

Html.DropDownListFor(x=>x.StartTime, Model.Times, "Please select a time"), new {@class = "dropdownlist" })