尝试返回"选择列表项"下拉列表的视图模型



这是我的控制器

[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"类型。

关于为什么会发生这种情况以及如何解决它的任何想法?

问题是您需要再次用数据填充 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);
}

我过去通过执行以下操作解决了这个问题。

创建一个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"
};
}

然后在创建IEnumerable列表后,只需在剃须刀中使用它:

@Html.DropDownListFor(m => m.SelectedLinkedServiceId, selectList)

最新更新