尝试返回SelectListItem下拉列表的视图模型

时间:2018-05-24 19:42:15

标签: asp.net asp.net-mvc-4 razor asp.net-core .net-core

这是我的控制器

@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;。

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

2 个答案:

答案 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)