MVC在视图上显示数据库查询

时间:2017-12-01 19:05:10

标签: c# asp.net asp.net-mvc-4

我有一个MVC应用程序,其中包含许多由oracle数据库支持的数据网格。我希望能够以某种方式显示支持页面上每个特定网格的查询。查询是动态的,具体取决于传递给它们的参数,因此我希望能够显示进入数据库的最终查询。我不确定如何在不必为每个查询编写单独的函数以便能够返回最终结果的情况下实现此目的。我唯一的想法是做这样的事情:

public class DatabaseResult<T> 
{
    public QueryInformation queryInfo { get; set; }
    public List<T> data { get; set; }
}
public class QueryInformation {
    //various properties about the query
    public string query { get; set; }
}

然后在我的数据提供者中,我将这样做:

    public DatabaseResult<RestProgressGridModel> getGridData(string orgkey, string lvlnumdd, string lvlnum)
    {
        List<RestProgressGridModel> data = new List<RestProgressGridModel>();
        string grid = query.Replace("{orgkey}", orgkey).Replace("{lvlnum}", lvlnum).Replace("{lvlnumdd}", lvlnumdd);
        foreach (DataRow dr in FillDataTableFromQuery(grid).Rows)
        {
            data.Add(new RestProgressGridModel { });
        }
        return new DatabaseResult<RestProgressGridModel> {
            data = data,
            test = new QueryInformation {query = query }
        };
    }

从这里开始,我不确定我将如何在视图本身上访问它。我可以将查询存储到ViewBag中,但我不确定这是否是最好的方法。

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

如果我错了,请原谅我,但你还没有将query传递给视图吗?:

return new DatabaseResult<RestProgressGridModel> {
     data = data,
     test = new QueryInformation {query = query } // shouldn't this be query = new...?
 };

在您创建DatabaseResult<RestProgressGridModel>的位置,您需要设置test(我认为应该是queryInfo)属性,其中包含查询本身。< / p>

你不能直接在View中使用它吗?

<p>@Model.queryInfo.query</p>

其他一些有用的指示:

在C#中,属性通常在PascalCase中以开头的大写字母命名。

尽量避免使用camelCase,因为这通常用于局部变量(或私有字段,理想情况下以_为前缀)。

它有助于您和阅读代码的任何人的可读性。