Это потому, что вы уже выбрали Value
и Value
не имеет такой собственности, как Value
. Вы должны изменить в контроллере:
var yyy = (from a in Connection.Db.Authorities select a.Value);
в
var yyy = (from a in Connection.Db.Authorities select a);
ИЛИ изменить вид на
@foreach(var item in ViewBag.data)
{
@item
}
//////////////// //////////////////////////////// EDITS ///////////////// ///////////////////////////////
Чем нельзя использовать анонимный объект. Вы должны создать 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, 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
для передачи данных с контроллера для просмотра? Почему вы не используете модель для передачи этих данных в соответствии с шаблоном MVC?
///////////////////////////////////////////// /// БОЛЬШЕ РЕДАКТИРОВАНИЯ ///////////////////////////////////////////// ///
Чтобы отправить несколько результатов запроса, вы можете создать более сложную модель.Например:
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, 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);
и с точки зрения вы можете использовать:
@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>
На самом деле, я не понимаю, почему ваш * первый * код работает. Похоже, что он отображает 'a.Value.Value' для каждого' a'. –
@justin вы правы, первый код не работает. теперь обновляется ... – isa