这是我的控制器
@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>
这是我的剃刀观点
HttpPost
我想做的就是提交myrazor视图,然后在选定的下拉列表中使用submited选项重定向回同一页面。但是,我在HttpGet
视图中收到此错误,{{1}}视图工作正常,我可以成功提交。
InvalidOperationException:具有键&#39; SelectedLinkedServiceId&#39;的ViewData项。属于&#39; System.Int32&#39;但必须是&#39; IEnumerable&lt; SelectListItem&gt;&#39;。
关于为什么会发生这种情况以及如何解决这个问题的任何想法?
答案 0 :(得分:0)
问题是你需要再次使用数据填充DropDownList,因为这些数据在回发之间不会持续存在。
[HttpPost]
public IActionResult Unregister(LinkedServiceTableViewModel lst)
{
// Do something, and display the page again with data.
lst.BuildLinkedServices();
lst.LinkedServices = GetLinkedServices(lst);
return View(lst);
}
答案 1 :(得分:-1)
我过去通过以下方式解决了这个问题。
创建一个IEnumerable。
@{
ViewData["Title"] = "Unregister Linked Service";
IEnumerable<SelectListItem> selectList =
from cf in Model.LinkedServices
select new SelectListItem
{
Selected = cf."your value",
Text = cf."your value",
Value = cf."your value"
};
}
然后在创建IEnumber列表后,只需在剃须刀中使用它。
@Html.DropDownListFor(m => m.SelectedLinkedServiceId, selectList)