Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将ADO.NET数据集传递给视图_C#_Sql Server_Asp.net Mvc_Database_Ado.net - Fatal编程技术网

C# 如何将ADO.NET数据集传递给视图

C# 如何将ADO.NET数据集传递给视图,c#,sql-server,asp.net-mvc,database,ado.net,C#,Sql Server,Asp.net Mvc,Database,Ado.net,我有一个遗留项目,我们正在慢慢地转向MVC,但是有数百个ADO.NET SQL数据集对象 我希望将数据集保留在模型中,并在视图中访问它。这是可能的,还是有更好的方法?创建列表很困难,因为数据太多。我们最终会将SQL转换为实体,但现在不会 例如: 型号: string query = "SELECT * FROM dbo.manf"; SqlDataAdapter adapter = new SqlDataAdapter(query, conn); DataSet data = new Da

我有一个遗留项目,我们正在慢慢地转向MVC,但是有数百个ADO.NET SQL数据集对象

我希望将数据集保留在模型中,并在视图中访问它。这是可能的,还是有更好的方法?创建列表很困难,因为数据太多。我们最终会将SQL转换为实体,但现在不会

例如:

型号:

 string query = "SELECT * FROM dbo.manf";
 SqlDataAdapter adapter = new SqlDataAdapter(query, conn);
 DataSet data = new DataSet();
 adapter.Fill(data, "manf");
视图:


可以将任何对象传递到视图,因此控制器代码应如下所示:

public ViewResult Index() 
{ 
    .... 
    return View(data); 
} 
你的看法是:

@model System.Data.DataSet

@foreach (DataRow row in Model.Tables["manf"].Rows)    
{    
    @(row["id"] + " " + row["name"])
}  
传递的对象将存储在视图的通用基类的Model属性中,您可以使用Model访问它。@model定义传递的对象的数据类型

不管怎样,任何代码都将是HTML编码的,不需要:。如果不想编码,则必须使用@Html.Raw(…)

编辑:只能将一个参数作为模型移动。如果要使用多个对象,可以定义一个新的数据类型(ViewModel),其中包含这两个对象的属性。对于窗口标题等简单对象,可以使用ViewBag

ViewBag.Title = myTitle;
ViewBag是控制器的动态属性,基本上是ViewData的包装器。

控制器代码

     //pQ is your query you have created 
     //P4DAL is the key name for connection string 

       DataSet ds = pQ.Execute(System.Configuration.ConfigurationManager.ConnectionStrings["Platform4"].ConnectionString);


      //ds will be used below
      //create your own view model according to what you want in your view 
     //VMData is my view model

     var _buildList = new List<VMData>();
                {
                    foreach (DataRow _row in ds.Tables[0].Rows)
                    {
                        _buildList.Add(new VMData
                        {  
         //chose what you want from the dataset results and assign it your view model fields 

                            clientID = Convert.ToInt16(_row[1]),
                            ClientName = _row[3].ToString(),
                            clientPhone = _row[4].ToString(),
                            bcName = _row[8].ToString(),
                            cityName = _row[5].ToString(),
                            provName = _row[6].ToString(),
                        });



                    }

                }

      //you will use this in your view
      ViewData["MyData"] = _buildList;
//pQ是您创建的查询
//P4DAL是连接字符串的键名
数据集ds=pQ.Execute(System.Configuration.ConfigurationManager.ConnectionString[“Platform4”].ConnectionString);
//下面将使用ds
//根据视图中需要的内容创建自己的视图模型
//VMData是我的视图模型
var_buildList=新列表();
{
foreach(ds.Tables[0].行中的DataRow\u行)
{
_buildList.Add(新VMData)
{  
//从数据集结果中选择所需内容,并将其指定给视图模型字段
clientID=Convert.ToInt16(第[1]行),
ClientName=_行[3]。ToString(),
clientPhone=_行[4]。ToString(),
bcName=_行[8]。ToString(),
cityName=_行[5]。ToString(),
provName=_行[6]。ToString(),
});
}
}
//您将在视图中使用此选项
ViewData[“MyData”]=\u构建列表;
看法

    @if (ViewData["MyData"] != null)
    {

        var data = (List<VMData>)ViewData["MyData"];
        <div class="table-responsive">
            <table class="display table"  id="Results">

                <thead>
                    <tr>
                        <td>Name</td>
                        <td>Telephone</td>
                        <td>Category </td>
                        <td>City </td>
                        <td>Province </td>

                    </tr>
                </thead>

                <tbody>
                    @foreach (var item in data)
                    {
                <tr>
                    <td>@Html.ActionLink(item.ClientName, "_Display", new { id = item.clientID }, new { target = "_blank" })</td>
                    <td>@item.clientPhone</td>
                    <td>@item.bcName</td>
                    <td>@item.cityName</td>
                    <td>@item.provName</td>

                </tr>

                }
                </tbody>


            </table>
            </div>
            }
@if(ViewData[“MyData”]!=null)
{
变量数据=(列表)视图数据[“MyData”];
名称
电话
类别
城市
省
@foreach(数据中的var项)
{
@ActionLink(item.ClientName,“_Display”,new{id=item.clientID},new{target=“_blank”})
@item.clientPhone
@item.bcName
@item.cityName
@item.provName
}
}

您有任何域对象吗?我倾向于将DataTable转换为控制器中的域对象,然后将其传递给视图。这不是最好的方法,但因为您正在迁移旧应用程序。。。您可以将数据集作为模型实体传递给视图。因此,您的模型将是一个数据集。对对象使用Get和set?嗯,我有一些有200列的查询。我认为手写会很费时。还有别的吗?很好。我可以为视图()使用多个参数吗?我正在使用一个case语句来选择视图,因此我需要:view(“pagename”,data)?我似乎无法将数据作为数据集传递。是否有我遗漏的内容?是否有错误消息?您不能使用视图(“pagename”,数据)。关于不止一个参数:我在答案中添加了更多信息,可以使用ViewBag或包含这两个属性的新数据类型。
    @if (ViewData["MyData"] != null)
    {

        var data = (List<VMData>)ViewData["MyData"];
        <div class="table-responsive">
            <table class="display table"  id="Results">

                <thead>
                    <tr>
                        <td>Name</td>
                        <td>Telephone</td>
                        <td>Category </td>
                        <td>City </td>
                        <td>Province </td>

                    </tr>
                </thead>

                <tbody>
                    @foreach (var item in data)
                    {
                <tr>
                    <td>@Html.ActionLink(item.ClientName, "_Display", new { id = item.clientID }, new { target = "_blank" })</td>
                    <td>@item.clientPhone</td>
                    <td>@item.bcName</td>
                    <td>@item.cityName</td>
                    <td>@item.provName</td>

                </tr>

                }
                </tbody>


            </table>
            </div>
            }