Model view controller 视图在MVC中不返回post上的模型数据
我不熟悉MVC和ASP.NETCore。我正在尝试做一个页面,用户可以从下拉列表中为工单分配员工id。一切看起来都很好,我在视图中获得了数据,但当我按下assign按钮时,我在HTTPPOST中没有在模型中获得任何数据 视图模型Model view controller 视图在MVC中不返回post上的模型数据,model-view-controller,asp.net-core-mvc,Model View Controller,Asp.net Core Mvc,我不熟悉MVC和ASP.NETCore。我正在尝试做一个页面,用户可以从下拉列表中为工单分配员工id。一切看起来都很好,我在视图中获得了数据,但当我按下assign按钮时,我在HTTPPOST中没有在模型中获得任何数据 视图模型 namespace AVI_IT.ViewModels { 公共类AdminPageViewModel { 公共字典dict{get;set;} } } 控制器 public class AdminPageController : Controller {
namespace AVI_IT.ViewModels
{
公共类AdminPageViewModel
{
公共字典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");
}
公共类AdminPageController:控制器
{
私有只读AvivDataContext _db;
公共AdminPageController(AvivDataContext数据库)
{
这个。_db=db;
}
公共IActionResult索引()
{
AdminPageViewModel thisViewModel=新的AdminPageViewModel();
var employeeList=新列表();
var dict=新字典();
foreach(员工在_db.Employee中)
{
SelectListItem=新建SelectListItem();
item.Value=employee.employeeID.ToString();
item.Text=employee.employeeID.ToString();
员工列表。添加(项目);
}
foreach(HelpDeskViewModel helpDesk位于_db.helpDesk中)
{
if(helpDesk.empID==null)
{
thisViewModel.dict=dict;
如果(!dict.ContainsKey(helpDesk.ticketID))
thisViewModel.dict.Add(helpDesk.ticketID,employeeList);
}
}
返回视图(thisViewModel);
}
[HttpPost]
公共IActionResult索引(AdminPageViewModel thisViewModel)
{
如果(!ModelState.IsValid)
{
返回视图(thisViewModel);
}
返回操作(“索引”);
}
看法
@model AVI_IT.ViewModels.AdminPageViewModel
@使用(Html.BeginForm())
{
@ActionLink(“创建角色”、“创建角色”,
“管理”)
管理
角色
车票号码
指派员工
@foreach(Model.dict中的var票据)
{
@票,钥匙
@Html.DropDownListFor(Model=>ticket.Value,new SelectList(ticket.Value,
“值”、“文本”)、“分配员工”、新的{@class=“表单控制”})
}
分配
}
我被困在这里,任何帮助都将不胜感激。谢谢您可以尝试将
公共字典SelectedICT{get;set;}
添加到您的AdminPageViewModel
,并将所选数据传递到SelectedICT
。下面是一个演示:
型号:
public class AdminPageViewModel {
public Dictionary<int, List<SelectListItem>> dict { get; set; }
public Dictionary<int, string> selecteddict { get; set; }
}
行动:
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);
}
public IActionResult TestDict(AdminPageViewModel m)
{
AdminPageViewModel m1=新的AdminPageViewModel
{
dict=新字典()
{
{0,新列表{new SelectListItem{Value=“01”,Text=“0one”},新SelectListItem{Value=“02”,Text=“0two”},新SelectListItem{Value=“03”,Text=“0three”},
{1,新列表{new SelectListItem{Value=“11”,Text=“1one”},新SelectListItem{Value=“12”,Text=“1two”},新SelectListItem{Value=“13”,Text=“1three”},
{2,新列表{new SelectListItem{Value=“21”,Text=“2one”},新SelectListItem{Value=“22”,Text=“2two”},新SelectListItem{Value=“23”,Text=“2Tree”},
}
};
返回视图(m1);
}
结果:
谢谢@Yiyi You,这帮了我很大的忙。我设法在帖子中获得了所需的数据。谢谢你的帮助。现在转到下一期更新数据库中的数据:)
public class AdminPageViewModel {
public Dictionary<int, List<SelectListItem>> dict { get; set; }
public Dictionary<int, string> selecteddict { get; set; }
}
<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);
}