@ Html.DropDownList不设置选定的值

时间:2015-02-11 10:32:42

标签: c# asp.net asp.net-mvc linq entity-framework

我有一个MVC 4应用程序,我想要做的是在同一页面中列出特定预订的事件(以及有关预订的一些信息 - 通过使用viewbags)(仅使用Events模型) 。所以这很好,直到我添加一个下拉列表来更改该预订的statusCode(所有列表事件都与之相关)。

@Html.DropDownList("StatusCodeList") 

无论我做什么,它都不会改变。请帮我找出原因!

模型

public class Booking
    {
        [Key]
        public int BookingId { get; set; }

        [DisplayName("Event Title")]
        public string EventTitle { get; set; }      

        [DisplayName("Requester's Name")]
        public string UserFullName { get; set; }

        [DataType(DataType.Date)]
        [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
        public System.DateTime RequestDate { get; set; }

        [DisplayName("Event Date")]
        [DataType(DataType.Date)]
        [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
        public System.DateTime EventDate { get; set; }

        [DisplayName("Login")]
        public string Login { get; set; }

        [DisplayName("NetworkID")]
        public string NetworkID { get; set; }

        public string BookingTotalCost { get; set; }

         [ForeignKey("StatusCode")]
        public int StatusCodeId { get; set; }
        public virtual StatusCode StatusCode { get; set; }

        [Required(ErrorMessage = "Event Type is required.")]
        [ForeignKey("CateringType")]
        public int CateringTypeId { get; set; }
        public virtual CateringType CateringType { get; set; }

        public List<Event> Events { get; set; }

    }

public class Event
    {    
         [Key]
        public int EventId { get; set; }

        [Required(ErrorMessage = "Event Leader is required")]
        [DisplayName("Event Leader")] 
        public string EventLeader { get; set; }

        [Required(ErrorMessage = "Budget Code is required")]
        [DisplayName("Budget Code")] 
        public string EventBudgetCode { get; set; }

        [DisplayName("Special Requirements")]
        public string SpecialRequirements { get; set; }

        [DisplayName("Event Cost")]
        public string EventTotalCost { get; set; }

        [Required(ErrorMessage = "Participants are required")]
        [Range(1, 300, ErrorMessage = "Participants must be </br> between 1 and 300")]
        [StringLength(3, ErrorMessage = "Max 3 digits")]
         [DisplayName("Participants")]
        public string EventParticipants { get; set; }

        [Required(ErrorMessage = "Room is required")]
        [DisplayName("Room Number")] 
        [ForeignKey("Room")]
        public int RoomId { get; set; }
        public virtual Room Room { get; set; }

        [Required(ErrorMessage = "Start Time is required")]
        [DisplayName("Start Time")] 
        [DataType(DataType.Time)]
        public DateTime EventStartDateTime { get; set; }

       [Required(ErrorMessage = "End Time is required")]
        [DisplayName("End Time")]
        [DataType(DataType.Time)]
        [DateEnd(DateStartProperty = "EventStartDateTime")]
        public DateTime EventEndDateTime { get; set; }

        [ForeignKey("Booking")]
        public int BookingId { get; set; }
        public virtual Booking Booking { get; set; }

        [Required(ErrorMessage = "Dietary Requirements are required")]
        [DisplayName("Dietary Requirement")] 
        [ForeignKey("DietaryRequirement")]
        public int DietaryRequirementId { get; set; }
        public virtual DietaryRequirement DietaryRequirement { get; set; }

        public ICollection<CateringItem> CateringItems { get; set; }    

    }

控制器

public ActionResult RequestDetails(int id)
        {


            var eventList = from s in SystemDB.Events
                            where s.BookingId == id
                            select s;

            Booking booking = SystemDB.Bookings.Find(id);

            ViewBag.Date = booking.EventDate.ToShortDateString();
            ViewBag.BookingId = id;

            ViewBag.Requester = booking.UserFullName;
            ViewBag.RequesterEmail = booking.NetworkID + "@gmail.com";


            var sum = (from s in SystemDB.Events.ToList()
                       where s.BookingId == id
                       select Convert.ToDecimal(s.EventTotalCost)).Sum();


            if (booking.BookingTotalCost == null && sum == 0)
            {
                ViewBag.BookingTotalCost = "0";
            }
            else
            {
                ViewBag.BookingTotalCost = sum;

            }

            TempData["BookingId"] = id;

            var statuscodes = SystemDB.StatusCodes.Where(s => s.StatusCodeId != 1);
            ViewBag.StatusCodeList = new SelectList(statuscodes, "StatusCodeId", "StatusCodeName", booking.StatusCodeId);


            return View(eventList);
        }

        [HttpPost]
        [ActionName("RequestDetails")]
        public ActionResult PostRequestDetails(int id)
        {

            TempData["BookingId"] = id;

            var eventList = from s in SystemDB.Events
                            where s.BookingId == id
                            select s;

            ViewBag.BookingId = id;              

            Booking booking = SystemDB.Bookings.Find(id);

            ViewBag.Date = booking.EventDate.ToShortDateString();
            ViewBag.BookingId = id;

            ViewBag.Requester = booking.UserFullName;
            ViewBag.RequesterEmail = booking.NetworkID + "@gmail.com";

            var sum = (from s in SystemDB.Events.ToList()
                       where s.BookingId == id
                       select Convert.ToDecimal(s.EventTotalCost)).Sum();

            booking.BookingTotalCost = sum.ToString();

            var statuscodes = SystemDB.StatusCodes.Where(s => s.StatusCodeId != 1);
            ViewBag.StatusCodeList = new SelectList(statuscodes, "StatusCodeId", "StatusCodeName", booking.StatusCodeId);


            if (ModelState.IsValid)
            {

                SystemDB.Entry(booking).State = EntityState.Modified;

                SystemDB.SaveChanges();

                return RedirectToAction("RequestList", "Admin", new { id = id });
            }


            return View(eventList);
        }

查看

@model IEnumerable<CateringBookingSystem.Models.Event>

@using (Html.BeginForm())
{

<span><b>Booking for: </b>@ViewBag.Date</span> <span style="padding-left:20px;"><b>Total Cost: </b>£@ViewBag.BookingTotalCost</span> <span style="padding-left:20px;"><b>Requester: </b><a href="mailto:'@ViewBag.RequesterEmail'?Subject=Catering%20enquiry" target="_top">@ViewBag.Requester</a></span> <span style="padding-left:20px;"><b>Status: </b> @Html.DropDownList("StatusCodeList")  </span>

      <table id="listTable" style="width:100%" >
    <tr style="color:white;">
        <th>
            @Html.DisplayNameFor(model => model.EventLeader)
        </th>
        <th>
           @Html.DisplayNameFor(model => model.EventStartDateTime)
        </th>
         <th>
           @Html.DisplayNameFor(model => model.EventEndDateTime)
        </th>
         <th>
           @Html.DisplayNameFor(model => model.Room.RoomNumber)
        </th>
         <th>
          @Html.DisplayNameFor(model => model.EventParticipants)
        </th>
        <th>
           @Html.DisplayNameFor(model => model.EventTotalCost)
        </th>        
        <th></th>
    </tr>

@foreach (var item in Model)
{       
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.EventLeader)
        </td>
        <td>

            @Html.DisplayFor(modelItem => item.EventStartDateTime)

             </td>
     <td>

            @Html.DisplayFor(modelItem => item.EventEndDateTime)

             </td>

          <td>

            @Html.DisplayFor(modelItem => item.Room.RoomNumber)

             </td>
        <td>
            @Html.DisplayFor(modelItem => item.EventParticipants)
        </td>

        <td>

            £@Html.DisplayFor(modelItem => item.EventTotalCost)

             </td>

            <td>
              @Html.ActionLink("Amend", "EditEventForEventList", new { EventId = item.EventId,  Amend = "True" }) |

              <a class="clicker" dialogid="@item.EventId" href="#"> View Catering</a> |
                <div class="dialog @item.EventId " title=""> 
                     <p>@{Html.RenderAction("ViewEvent", "Home", new { EventId = item.EventId });}</p>
                     </div>

                @Html.ActionLink("Delete", "DeleteEventFromEventList", new { id = item.EventId }) 
        </td>     

    </tr>
}    
</table>
    <div style="padding-top:50px;">
    <input type="submit" value="submit" />
        </div>
}

0 个答案:

没有答案