【发布时间】:2018-11-04 03:14:21
【问题描述】:
这是我的控制器
[HttpGet]
public IActionResult Unregister(LinkedServiceTable lst)
{
lst.BuildLinkedServices();
var model = new LinkedServiceTableViewModel
{
LinkedServices = GetLinkedServices(lst)
};
return View(model);
}
[HttpPost]
public IActionResult Unregister(LinkedServiceTableViewModel vm)
{
return View(vm);
}
private IEnumerable<SelectListItem> GetLinkedServices(LinkedServiceTable lst)
{
var roles = lst.LinkedServices.Select(x => new SelectListItem
{
Value = x.LinkedServiceId.ToString(),
Text = x.ServiceName
});
return new SelectList(roles, "Value", "Text");
}
这是我的观点
@model CDIWeb.ViewModels.LinkedServiceTableViewModel
@{
ViewData["Title"] = "Unregister Linked Service";
}
<h2>@ViewData["Title"]</h2>
<form action="/LinkedService/Unregister" method="post">
@Html.LabelFor(m => m.SelectedLinkedServiceId)
@Html.DropDownListFor(m => m.SelectedLinkedServiceId, Model.LinkedServices)
<button type="submit" value="Submit">Submit</button>
</form>
我要做的就是提交 myrazor 视图,然后在选中下拉列表中的已提交选项的情况下重定向回同一页面。但是,我在 HttpPost 视图上收到此错误,HttpGet 视图工作正常,我能够成功提交。
InvalidOperationException:具有键“SelectedLinkedServiceId”的 ViewData 项属于“System.Int32”类型,但必须属于“IEnumerable
”类型。
关于为什么会发生这种情况以及如何解决它的任何想法?
【问题讨论】:
-
我认为错误意味着
Model.LinkedServices为空,因此它认为您的第一个参数是选择项列表。 -
@TravisJ 抱歉,为了进一步澄清,我的 HttpGet 视图很好,我得到了正确的下拉列表,但是当我单击提交并重定向到 HttpPost 视图时,我得到了那个错误。
-
是的,很可能是因为
LinkedServiceTableViewModel不包含实例化的LinkedServices列表(如,它为空)。 -
如果
LinkedServices在HttpGet中正确显示,怎么可能为null?LinkedServiceTableViewModel内置在 HttpGet Unregister Action 中,显示页面,LinkedServices 正确显示在下拉列表中,然后将相同的对象传递给 unregister HttpPost 操作。以后怎么会变成null呢? -
Get 和 Post 是两个不同的请求。
标签: asp.net asp.net-mvc-4 razor asp.net-core .net-core