我有一个遗留项目,我们正在慢慢转向MVC,但有数百个ADO.NET SQL DataSet对象
我想将数据集保留在模型中并在视图中访问它。这是可能的,还是有更好的方法来做到这一点?创建列表很困难,因为数据太多。我们最终将SQL转换为实体,但现在不是。
示例:
型号:
string query = "SELECT * FROM dbo.manf";
SqlDataAdapter adapter = new SqlDataAdapter(query, conn);
DataSet data = new DataSet();
adapter.Fill(data, "manf");
查看:
@foreach (DataRow data in manf.Tables["manf"].Rows)
{
@:manf["id"] + " " + manf["name"]);
}
答案 0 :(得分:2)
您可以将任何对象传递给View,因此您的控制器代码应如下所示:
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的包装器。
答案 1 :(得分:1)
控制器代码
//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;
查看
@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>
}