一直用這一個我的頭撞牆了幾天,似乎無法弄清楚或找到一篇文章,回答我的問題。編輯多條記錄 - asp.net mvc
我正在研究一個用於工作的rota系統,這個系統已經基本完成,但我被困在管理區的這一部分。 這將允許管理人員爲特定團隊編輯給定日期範圍內的多個rota條目。 它最終將使用視圖模型來傳遞dateFrom,dateTo和Team(teamID) - 我現在就這樣做了,試圖讓它工作。
的ROTAS存儲在ROTAS表(見下文)。 Rotas table
MorningShift和EveningShift(二者FK的)存儲僱員的工資號例如123456
員工詳細信息都存儲在TeamMembers表(見下文)。 TeamMembers table
在TeamMembers表中的用戶名是員工的工資數。
我的問題是,我似乎無法得到當前輸入的值在旋轉表中顯示在視圖的下拉列表中。它僅在選擇列表(Model.TeamMembers)中顯示了所有下拉列表中的第一名員工。 我的問題是,如何獲取當前值以在視圖中的每個下拉菜單中顯示? 我也嘗試
@Html.DropDownListFor(m => m.Rotas[i].MorningShift, Model.TeamMembers,
Model.Rotas[i].TeamMember1.FirstName + " " + Model.Rotas[i].TeamMember1.Surname, null)
不過,雖然這顯示了正確的員工,它並沒有爲選項設置的值,顯然再次顯示了僱員的名字,因爲這是在選擇列表的。
我到目前爲止有:
控制器:
public async Task<ActionResult> ModifyRotas(DateTime? dateFrom,
DateTime? dateTo, int? Team)
{
Auth auth = new Auth();
bool isAdmin = auth.IsAdmin();
if (!isAdmin)
{
return new HttpStatusCodeResult(HttpStatusCode.Unauthorized);
}
if (dateFrom != null && dateTo != null)
{
DateTime today = DateTime.Today;
DateTime startDate = Convert.ToDateTime(dateFrom);
DateTime endDate = Convert.ToDateTime(dateTo);
// Make sure earlier shifts can't be modified
if (startDate < today)
{
startDate = today;
}
// Verify the team exists
Team teamDetails = await db.Teams.FindAsync(Team);
if (teamDetails == null)
{
return HttpNotFound();
}
ModifyRotaVM vm = new ModifyRotaVM();
// Get rotas for the team for the dates specified
var rotas = await db.Rotas.Where(r => r.TeamID == Team && (r.ShiftDate >= startDate && r.ShiftDate <= endDate)).ToListAsync();
vm.Rotas = rotas;
// Generate the dropdown lists
var teamMembers = db.TeamMembers.Where(m => m.TeamID == Team && m.Deleted == 0).Select(m => new SelectListItem() { Text = m.FirstName + " " + m.Surname, Value = m.Username });
ViewBag.MorningShift = teamMembers;
ViewBag.EveningShift = teamMembers;
vm.TeamMembers = teamMembers;
return View(vm);
}
// If we got here, something went wrong; redisplay the form
return RedirectToAction("Modify");
}
的VM:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace TeamRota.Models
{
public class ModifyRotaVM
{
public List<Rota> Rotas { get; set; }
public IEnumerable<SelectListItem> TeamMembers { get; set; }
}
}
的觀點:
@model TeamRota.Models.ModifyRotaVM
@{
ViewBag.Title = "ModifyRotas";
}
<h2>Modify Rotas</h2>
@using (Html.BeginForm("RotaMod", "Rotas", new { area = "Admin" },
FormMethod.Post))
{
// Being passed in so we can redirect back to the same page after the update
@Html.Hidden("startDate", Request.QueryString["dateFrom"])
@Html.Hidden("endDate", Request.QueryString["dateFrom"])
@Html.Hidden("TeamID", Request.QueryString["Team"])
<table width="100%">
<tr>
<td>Shift date</td>
<td>Morning shift</td>
<td>Evening shift</td>
</tr>
@for (int i = 0; i < Model.Rotas.Count(); i++)
{
<tr>
<td>
@Html.HiddenFor(m => m.Rotas[i].ID)
@Html.DisplayFor(m => m.Rotas[i].ShiftDate)
</td>
<td>@Html.DropDownListFor(m => m.Rotas[i].MorningShift, Model.TeamMembers, Model.Rotas[i].TeamMember1.FirstName + " " + Model.Rotas[i].TeamMember1.Surname, null)</td>
<td>@Html.DropDownListFor(m => m.Rotas[i].EveningShift, Model.TeamMembers, Model.Rotas[i].TeamMember.FirstName + " " + Model.Rotas[i].TeamMember.Surname, null)</td>
</tr>
}
<tr>
<td colspan="4"><input type="submit" class="btn btn-success" value="Update" /></td>
</tr>
</table>
}
會很感激的任何幫助,任何人可以提供。
謝謝。
Tom
我] .TeamMember1.Surname'到你的DropDownListFor?如果您正在修改,使用標籤的目的是什麼?如果您正在修改,則應在頁面加載時顯示正確的值。如果您正在創建,則應使用標籤。 –
我試圖看看它是否會把正確的員工自動選中 - 我對asp相對來說比較陌生。net和mvc – Tom
這解釋了爲什麼它沒有與之相關的價值,以及它在選擇列表中再次顯示。我認爲這個問題的解決方案可能是一點點測試,看看會發生什麼......所以我會發佈一個解決方案,即使它最初可能不正確。如果沒有,我們可以通過它。 –