View 不 return 在 MVC post 上建模数据
View does not return Model data on post in MVC
我是 MVC 的新手并且 ASP.NETCore。我正在尝试创建一个页面,用户可以在其中将下拉列表中的员工 ID 分配给工单。一切看起来都很好,我在视图中获取了数据,但是当我按下分配按钮时,我没有在 HTTP Post.
模型中获取任何数据
视图模型
namespace AVI_IT.ViewModels
{
public class AdminPageViewModel
{
public Dictionary<int, List<SelectListItem>> dict { get; set; }
}
}
控制器
public class AdminPageController : Controller
{
private readonly AvivDataContext _db;
public AdminPageController(AvivDataContext db)
{
this._db = db;
}
public IActionResult Index()
{
AdminPageViewModel thisViewModel = new AdminPageViewModel();
var employeeList = new List<SelectListItem>();
var dict = new Dictionary<int, List<SelectListItem>>();
foreach (Employee employee in _db.employee)
{
SelectListItem item = new SelectListItem();
item.Value = employee.employeeID.ToString();
item.Text = employee.employeeID.ToString();
employeeList.Add(item);
}
foreach (HelpDeskViewModel helpDesk in _db.helpdesk)
{
if (helpDesk.empID == null)
{
thisViewModel.dict = dict;
if(!dict.ContainsKey(helpDesk.ticketID))
thisViewModel.dict.Add(helpDesk.ticketID, employeeList);
}
}
return View(thisViewModel);
}
[HttpPost]
public IActionResult Index(AdminPageViewModel thisViewModel)
{
if (!ModelState.IsValid)
{
return View(thisViewModel);
}
return RedirectToAction("Index");
}
查看
@model AVI_IT.ViewModels.AdminPageViewModel
<fieldset>
@using (Html.BeginForm())
{
<form method="post">
<table align="center">
<tr>
<td>
<button class=" btn btn-primary">@Html.ActionLink("Create Role", "CreateRole",
"Administration")</button>
</td>
<td>
<button class=" btn btn-primary" asp-action="Index" asp-controller="UserRoles">Manage
Roles</button>
</td>
</tr>
</table>
<table class="table table-striped">
<thead>
<tr>
<th>Ticket Number</th>
<th>Assign Employee</th>
</tr>
</thead>
@foreach (var ticket in Model.dict)
{
<tr>
<td>@ticket.Key</td>
<td>@Html.DropDownListFor(Model => ticket.Value, new SelectList(ticket.Value,
"Value", "Text"), "Assign Employee", new { @class = "form-control" })</td>
</tr>
}
<tr><td><button type="submit" class="btn btn-primary form-control">Assign</button></td></tr>
</table>
</form>
}
</fieldset>
我被困在这里,非常感谢任何帮助。谢谢
您可以尝试将 public Dictionary<int, string> selecteddict { get; set; }
添加到您的 AdminPageViewModel
,并将选定的数据传递给 selecteddict
。这是一个演示:
型号:
public class AdminPageViewModel {
public Dictionary<int, List<SelectListItem>> dict { get; set; }
public Dictionary<int, string> selecteddict { get; set; }
}
View(使用name="selecteddict[@ticket.Key]"
将选中的数据绑定到selecteddict
):
<fieldset>
@using (Html.BeginForm())
{
<form method="post">
<table align="center">
<tr>
<td>
<button class=" btn btn-primary">
@Html.ActionLink("Create Role", "CreateRole",
"Administration")
</button>
</td>
<td>
<button class=" btn btn-primary" asp-action="Index" asp-controller="UserRoles">
Manage
Roles
</button>
</td>
</tr>
</table>
<table class="table table-striped">
<thead>
<tr>
<th>Ticket Number</th>
<th>Assign Employee</th>
</tr>
</thead>
@foreach (var ticket in Model.dict)
{
<tr>
<td>@ticket.Key</td>
<td>
<select class="form-control" id="ticket_Value" name="selecteddict[@ticket.Key]" asp-items=@ticket.Value>
<option value="">Assign Employee</option>
</select>
</td>
</tr>
}
<tr><td><button type="submit" class="btn btn-primary form-control">Assign</button></td></tr>
</table>
</form>
}
</fieldset>
操作:
public IActionResult TestDict(AdminPageViewModel m)
{
AdminPageViewModel m1 = new AdminPageViewModel
{
dict = new Dictionary<int, List<SelectListItem>>()
{
{ 0,new List<SelectListItem> { new SelectListItem { Value="01",Text="0one"},new SelectListItem { Value="02",Text="0two"} ,new SelectListItem { Value="03",Text="0three"}}},
{ 1,new List<SelectListItem> { new SelectListItem { Value="11",Text="1one"},new SelectListItem { Value="12",Text="1two"} ,new SelectListItem { Value="13",Text="1three"}}},
{ 2,new List<SelectListItem> { new SelectListItem { Value="21",Text="2one"},new SelectListItem { Value="22",Text="2two"} ,new SelectListItem { Value="23",Text="2three"}}},
}
};
return View(m1);
}
结果:
我是 MVC 的新手并且 ASP.NETCore。我正在尝试创建一个页面,用户可以在其中将下拉列表中的员工 ID 分配给工单。一切看起来都很好,我在视图中获取了数据,但是当我按下分配按钮时,我没有在 HTTP Post.
模型中获取任何数据视图模型
namespace AVI_IT.ViewModels
{ public class AdminPageViewModel {
public Dictionary<int, List<SelectListItem>> dict { get; set; }
}
}
控制器
public class AdminPageController : Controller
{
private readonly AvivDataContext _db;
public AdminPageController(AvivDataContext db)
{
this._db = db;
}
public IActionResult Index()
{
AdminPageViewModel thisViewModel = new AdminPageViewModel();
var employeeList = new List<SelectListItem>();
var dict = new Dictionary<int, List<SelectListItem>>();
foreach (Employee employee in _db.employee)
{
SelectListItem item = new SelectListItem();
item.Value = employee.employeeID.ToString();
item.Text = employee.employeeID.ToString();
employeeList.Add(item);
}
foreach (HelpDeskViewModel helpDesk in _db.helpdesk)
{
if (helpDesk.empID == null)
{
thisViewModel.dict = dict;
if(!dict.ContainsKey(helpDesk.ticketID))
thisViewModel.dict.Add(helpDesk.ticketID, employeeList);
}
}
return View(thisViewModel);
}
[HttpPost]
public IActionResult Index(AdminPageViewModel thisViewModel)
{
if (!ModelState.IsValid)
{
return View(thisViewModel);
}
return RedirectToAction("Index");
}
查看
@model AVI_IT.ViewModels.AdminPageViewModel
<fieldset>
@using (Html.BeginForm())
{
<form method="post">
<table align="center">
<tr>
<td>
<button class=" btn btn-primary">@Html.ActionLink("Create Role", "CreateRole",
"Administration")</button>
</td>
<td>
<button class=" btn btn-primary" asp-action="Index" asp-controller="UserRoles">Manage
Roles</button>
</td>
</tr>
</table>
<table class="table table-striped">
<thead>
<tr>
<th>Ticket Number</th>
<th>Assign Employee</th>
</tr>
</thead>
@foreach (var ticket in Model.dict)
{
<tr>
<td>@ticket.Key</td>
<td>@Html.DropDownListFor(Model => ticket.Value, new SelectList(ticket.Value,
"Value", "Text"), "Assign Employee", new { @class = "form-control" })</td>
</tr>
}
<tr><td><button type="submit" class="btn btn-primary form-control">Assign</button></td></tr>
</table>
</form>
}
</fieldset>
我被困在这里,非常感谢任何帮助。谢谢
您可以尝试将 public Dictionary<int, string> selecteddict { get; set; }
添加到您的 AdminPageViewModel
,并将选定的数据传递给 selecteddict
。这是一个演示:
型号:
public class AdminPageViewModel {
public Dictionary<int, List<SelectListItem>> dict { get; set; }
public Dictionary<int, string> selecteddict { get; set; }
}
View(使用name="selecteddict[@ticket.Key]"
将选中的数据绑定到selecteddict
):
<fieldset>
@using (Html.BeginForm())
{
<form method="post">
<table align="center">
<tr>
<td>
<button class=" btn btn-primary">
@Html.ActionLink("Create Role", "CreateRole",
"Administration")
</button>
</td>
<td>
<button class=" btn btn-primary" asp-action="Index" asp-controller="UserRoles">
Manage
Roles
</button>
</td>
</tr>
</table>
<table class="table table-striped">
<thead>
<tr>
<th>Ticket Number</th>
<th>Assign Employee</th>
</tr>
</thead>
@foreach (var ticket in Model.dict)
{
<tr>
<td>@ticket.Key</td>
<td>
<select class="form-control" id="ticket_Value" name="selecteddict[@ticket.Key]" asp-items=@ticket.Value>
<option value="">Assign Employee</option>
</select>
</td>
</tr>
}
<tr><td><button type="submit" class="btn btn-primary form-control">Assign</button></td></tr>
</table>
</form>
}
</fieldset>
操作:
public IActionResult TestDict(AdminPageViewModel m)
{
AdminPageViewModel m1 = new AdminPageViewModel
{
dict = new Dictionary<int, List<SelectListItem>>()
{
{ 0,new List<SelectListItem> { new SelectListItem { Value="01",Text="0one"},new SelectListItem { Value="02",Text="0two"} ,new SelectListItem { Value="03",Text="0three"}}},
{ 1,new List<SelectListItem> { new SelectListItem { Value="11",Text="1one"},new SelectListItem { Value="12",Text="1two"} ,new SelectListItem { Value="13",Text="1three"}}},
{ 2,new List<SelectListItem> { new SelectListItem { Value="21",Text="2one"},new SelectListItem { Value="22",Text="2two"} ,new SelectListItem { Value="23",Text="2three"}}},
}
};
return View(m1);
}
结果: