加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net – .net MVC将linq数据从控制器传递到视图

发布时间:2020-12-16 04:10:02 所属栏目:asp.Net 来源:网络整理
导读:我试图从控制器传递数据到视图.我在网上搜索但找不到解决方案. 如果我这样做它有效: 控制器: 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 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的定义”.

任何帮助都会很棒.

谢谢.

-edited:更新了第二个控制器linq查询.并更正了第一个控制器linq查询.

解决方法

这是因为你已经选择了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>

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读