我有一个如下所示的模型。 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>
答案 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> @kvp.Key </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> @kvp.Value </td>
}
</tr>
i++;
}
</table>
</div>