我有一个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>
}