2015-05-29 95 views
1

我发送了一个viewdata到这样的视图页面。asp.net mvc viewdata在视图中显示

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> 
     } 

而我试图在视图页中显示viewdata,但它不起作用。 (对象引用未设置为对象实例)

如何在foreach语句中显示viewdata?

回答

0

要转换引用错误的类型,您创建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> 
     } 
+0

它运作良好。非常感谢! – Roy

1

对于要由用户选择的数据,您通常会使用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> 
     } 
+0

点就是他将参照错误的类型,从目前的代码,目前尚不清楚他想要一个下拉或没有? –

+0

@EhsanSajjad尽管确实为服务器端的数据生成SelectList没有意义吗?简单地编译代码并不是最好的答案。 – hutchonoid

+1

@ hutchonoid:你说得对。我误用了使用下拉列表的表达式。我应该这样写; – Roy