在视图中显示IEnumerable <dynamic>

时间:2017-03-19 01:32:43

标签: c# asp.net-mvc razor

我有一个如下所示的模型。 MenuItem模型,具有不同的SQL查询(MenuItem.MenuSQLQuery)。 我正在执行这些查询agaist进度数据库,我想在视图上显示结果。 SQL查询的返回是IEnumerable dynamic(使用dapper ORM)。 感谢您抽出时间阅读并感谢任何帮助。

模型

namespace Models.Menu
{
    public class MenuItem
    {

        public int MenuItemId { get; set; }
        public string MenuName { get; set; }
        public string MenuCategory { get; set; }
        public string MenuParent { get; set; }
        public string MenuAction { get; set; }
        public string MenuController { get; set; }
        public string MenuSQLQuery { get; set; }
        public string ResultColumnHeading { get; set; }
        public string MenuRole { get; set;}
    }
}

控制器

using Dapper;
using Microsoft.AspNet.Identity;
using System.Collections.Generic;
using System.Data;
using System.Data.Odbc;
using System.Linq;
using System.Web.Mvc;
using DataLayer;
using Models.Menu;

    namespace Controllers
    {
        public class BrowseController : Controller
        {
            public ActionResult Index()
            {
                return View();
            }

            public ActionResult BrowseResult(int menuId)
            {
                ApplicationDbContext context = new ApplicationDbContext();
                var odbcConnection = new OdbcConnection("DRIVER=Progress OpenEdge 10.2B Driver;****DIL=READ UNCOMMITTED");

                // Open your connection


                //ApplicationUser currentUser = context.Users.Where(u => u.UserName.Equals(UserName, StringComparison.CurrentCultureIgnoreCase)).FirstOrDefault();
                var userid = User.Identity.GetUserId();
                List<MenuUserAccess> menuAccess = context.MenuUserAccess.Where(m => m.MenuItemId == menuId).ToList();
                var access = menuAccess.FirstOrDefault(o => o.MenuUserId == userid);
                if (access != null)
                {
                    odbcConnection.Open();
                    var menuitem = context.MenuItem.First(m => m.MenuItemId == menuId);
                    var browseResult =  odbcConnection.Query(menuitem.MenuSQLQuery);
                    odbcConnection.Close();
                    odbcConnection.Dispose();
                    return View(browseResult);
                }
                else
                {
                    return View();
                }
            }
        }
    }

这是我正在使用的视图,但没有获得任何输出。

@model IEnumerable<dynamic>
<div>
    <h2>BrowseResult</h2>
    @if (Model.Count() > 0)
    {
        ViewBag.Title = "BrowseResult";
        WebGrid grid = new WebGrid(source: Model);
        @grid.GetHtml()
    }
    else
    {
        <p> No Data Found</p>
    }

    <h2>End</h2>
</div>

2 个答案:

答案 0 :(得分:1)

你需要这样的东西

@model IEnumerable<dynamic>
<div>
    <h2>BrowseResult</h2>
    @if (Model.Count() > 0)
    {
        ViewBag.Title = "BrowseResult";
        foreach(dynamic item in Model)
        {
            <span>@item.MenuName</span>
        }
    }
    else
    {
        <p> No Data Found</p>
    }

    <h2>End</h2>
</div>

返回

  

name1 name2

此链接中有一个WebGrid示例:https://www.w3schools.com/asp/webpages_webgrid.asp

答案 1 :(得分:1)

我让它发挥作用。

这是我的观看代码。

@model IEnumerable<dynamic>

<div>
    @{
        int i = 0;
    }
    <table class="table-striped">
        <tr>
            @foreach (KeyValuePair<string, object> kvp in Model.ElementAt(1))
            {
                // This will be the column heading
                <td> <b>&nbsp;@kvp.Key &nbsp;</b></td>
            }
        </tr>
        @foreach (var d in Model)
        {
            <tr>
                @foreach (KeyValuePair<string, object> kvp in Model.ElementAt(i))
                {
                    //This will be the row data
                    <td>&nbsp;@kvp.Value &nbsp;</td>
                }
            </tr>
            i++;
        }
    </table>
</div>