asp.net mvc viewdata 在viewpage中显示

asp.net mvc viewdata display in a viewpage

我向这样的视图页面发送了一个视图数据。

 public ActionResult SelectRes(int id)
    {
        var ResList = resrepository.GetAll();
        ViewData["ResList"] = new SelectList(ResList, "ResId", "Res_KORNM");

        return View(svcresrelationRepository.GetAll());
    }



@foreach (var item in ViewData["ResList"] as List<ITSDapper.Dapper.Resource>)
        {
            <tr>
                <td style="text-align:center;">
                    @Html.DisplayFor(a=> item.Res_KORNM)
                </td>
            </tr>
        }

我尝试在视图页面中显示视图数据,但没有成功。 (对象引用未设置为对象的实例)

如何在foreach语句中显示viewdata?

您通常会对要由用户选择的数据使用 SelectList

如果这是你的意图,你可以使用 Html.DropDownList:

@Html.DropDownList("SelectedId", 
                         (IEnumerable<SelectListItem>)ViewData["ResList"])

如果您只是需要查看数据,我会更改您的服务器端代码以使用 SelectList 以外的代码。

这可以按如下方式完成:

控制器

 public ActionResult SelectRes(int id)
    {
        var ResList = resrepository.GetAll();

        ViewData["ResList"] = ResList;

        return View(svcresrelationRepository.GetAll());
    }

查看

@foreach (var item in ViewData["ResList"] as List<ITSDapper.Dapper.Resource>)
        {
            <tr>
                <td style="text-align:center;">
                    @Html.DisplayFor(a=> item.Res_KORNM)
                </td>
            </tr>
        }

您将引用转换为错误的类型,您正在创建 SelectList 实例,而在视图中您将其转换为 IList<T>,您应该将其转换为 SelectList:

@foreach (var item in ViewData["ResList"] as SelectList)
        {
            <tr>
                <td style="text-align:center;">
                    @Html.DisplayFor(a=> item.Text)  // note this as well
                </td>
            </tr>
        }