我试图从控制器传递数据到视图.我在网上搜索但找不到解决方案.
如果我这样做它有效:
控制器:
var yyy = (from a in Connection.Db.Authorities select a) ; ViewBag.data = yyy;
视图:
@foreach(var item in ViewBag.data) { @item.Value }
但是以下代码不起作用:
控制器:
var yyy = (from a in Connection.Db.Authorities select new {Value = a.Value,TypeCode = a.TypeCode,Return = Calculate(a.Return)}) ; ViewBag.data = yyy;
视图:
@foreach(var item in ViewBag.data) { @item.Value }
它为视图文件提供“item不包含Value的定义”.
任何帮助都会很棒.
谢谢.
解决方法
这是因为你已经选择了Value,Value没有Value这样的属性.您应该更改控制器:
var yyy =(来自Connection.Db.Authorities中的a选择a.Value);至
var yyy = (from a in Connection.Db.Authorities select a);
或者将视图更改为
@foreach(var item in ViewBag.data) { @item }
////////////////////////////////////////////////编辑/ ///////////////////////////////////////////////
比你不应该使用匿名对象.您应该创建viewmodelClass.例如:
public class Authoritiesviewmodel { public string Value { get; set; } public string TypeCode { get; set; } public string Return { get; set; } }
并更改您的控制器:
var yyy = (from a in Connection.Db.Authorities select new Authoritiesviewmodel{ Value = a.Value,Return = Calculate(a.Return)}); ViewBag.data = yyy;
在您的视图中,您将能够使用:
<table> <tr> <th>Value</th> <th>TypeCode</th> <th>Return</th> </tr> @foreach(Authoritiesviewmodel item in ViewBag.data) { <tr> <td>@item.Value<td> <td>@item.TypeCode<td> <td>@item.Return<td> </tr> } </table>
另外,我有一个问题要问你.为什么使用ViewBag将数据从控制器传递到视图?为什么不根据MVC模式使用Model传递这些数据?
////////////////////////////////////////////////更多编辑////////////////////////////////////////////////
发送多个查询结果您可以创建更复杂的模型.例如:
public class Authoritiesviewmodel { public string Value { get; set; } public string TypeCode { get; set; } public string Return { get; set; } } public class AnotherQueryviewmodel { public string AnotherQueryValue { get; set; } public string AnotherQueryTypeCode { get; set; } public string AnotherQueryReturn { get; set; } } public class ModelClass { IEnumerable<Authoritiesviewmodel> Authorities { get; set; } IEnumerable<AnotherQueryviewmodel> AnotherQueryResults { get; set; } }
并更改控制器:
var yyy = (from a in Connection.Db.Authorities select new Authoritiesviewmodel{ Value = a.Value,Return = Calculate(a.Return)}); // do your another select var zzz = (from smthing select new AnotherQueryviewmodel ...) // create model instance ModelClass model = new ModelClass() { Authorities = yyy.AsEnumerable(),AnotherQueryResults = zzz..AsEnumerable() } // return view with model return View("view",model);
在视图中你可以使用:
@model ModelClass @*display first query result*@ <table> <tr> <th>Value</th> <th>TypeCode</th> <th>Return</th> </tr> @foreach(Authoritiesviewmodel item in Model.Authorities) { <tr> <td>@item.Value<td> <td>@item.TypeCode<td> <td>@item.Return<td> </tr> } </table> @*display second query result*@ <table> <tr> <th>Another Query Value</th> <th>Another Query TypeCode</th> <th>Another Query Return</th> </tr> @foreach(AnotherQueryviewmodel item in Model.AnotherQueryResults) { <tr> <td>@item.AnotherQueryValue<td> <td>@item.AnotherQueryTypeCode<td> <td>@item.AnotherQueryReturn<td> </tr> } </table>