我正在尝试将数据从 Controller 传递到 View 。我在网上搜索过但找不到解决方案。
如果我这样做它会起作用:
Controller :
var yyy = (from a in Connection.Db.Authorities select a) ;
ViewBag.data = yyy;
查看:
@foreach(var item in ViewBag.data)
{
@item.Value
}
但是下面的代码不起作用:
Controller :
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
}
它为 View 文件提供“项目不包含值的定义”。
任何帮助都会很棒。
谢谢。
-编辑:更新了第二个 Controller linq 查询。并更正了第一个 Controller linq 查询。
最佳答案
这是因为您已经选择了Value
,并且Value
没有Value
这样的属性。您应该更改 Controller :
var yyy =(从 Connection.Db.Authorities 中的 a 选择 a.Value);
到
var yyy = (from a in Connection.Db.Authorities select a);
或将 View 更改为
@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; }
}
并更改您的 Controller :
var yyy = (from a in Connection.Db.Authorities select new AuthoritiesViewModel{ Value = a.Value, TypeCode = a.TypeCode, 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
将数据从 Controller 传递到 View ?为什么不按照 MVC 模式使用 Model 将这些数据传递给 View 呢?
/////////////////////////////////////////////////////////////////////////////////////////更多编辑//////////////////////////////////////////////////
要发送多个查询结果 您可以创建更复杂的模型。例如:
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; }
}
并更改 Controller :
var yyy = (from a in Connection.Db.Authorities select new AuthoritiesViewModel{ Value = a.Value, TypeCode = a.TypeCode, 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);
并且在 View 中您可以使用:
@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>
关于asp.net - .net MVC 将 linq 数据从 Controller 传递到 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16793767/