在编写 Web 表单多年后,我正在尝试过渡到 MVC。我无法摆脱数据表并理解如何正确创建模型类。最大的问题是我的数据源是一个返回 XML 的宁静 Web 服务。
目前,我强烈地将视图模型键入为数据表。我是否因为不使用模型类而放弃了任何东西?我是否在控制器中包含太多信息?
下面只是一个简单的应用程序,它接受一个查询字符串值,使用一个 RESTful Web 服务执行搜索,然后在页面上输出结果。它可以工作,但我不觉得我已经创建了一个实际的 MVC 应用程序。
我的控制器:
using System.Web.Mvc;
using System.Data;
using System.Configuration;
namespace mvc1.Controllers
{
public class HomeController : Controller
{
dhRestful _datahandler = new dhRestful(ConfigurationManager.ConnectionStrings["service"].ConnectionString);
//
// GET: /Home/
public ActionResult Index(string search = "")
{
ViewBag.Title = "You searched for: " + search;
using (DataTable dt = _datahandler.get("tv_show?name=" + search))
{
return View(dt);
}
}
}
}
dhRestful 是我从之前的项目中移植的一个辅助类。它会进行安静的 Web 服务调用并将响应 XML 序列化为 DataTable。如果我应该继续使用这个类,我应该把它放在项目文件的哪里?
using System.Data;
using System.Xml;
namespace mvc1
{
public class dhRestful
{
string _hostPath = "";
public dhRestful(string hostPath)
{
_hostPath = hostPath;
}
public DataTable get(string partialUrl)
{
using (XmlTextReader xr = new XmlTextReader(_hostPath + partialUrl))
{
using (DataSet ds = new DataSet())
{
ds.ReadXml(xr);
if (ds.Tables.Count > 0)
{
return ds.Tables[0];
}
else
{
return new DataTable();
}
}
}
}
}
}
使用剃刀的视图:
@model System.Data.DataTable
<h2>@ViewBag.Title</h2>
<table border="1">
<thead>
<tr>
<th>ID</th>
<th>Show Name</th>
</tr>
</thead>
<tbody>
@foreach (System.Data.DataRow row in Model.Rows)
{
<tr>
<td>@row["id"].ToString()</td>
<td>@row["name"].ToString()</td>
</tr>
}
</tbody>
</table>
搜索名称为“Stargate”的示例 XML:
<myService>
<tv_show>
<id>72449</id>
<name>Stargate SG-1 </name>
</tv_show>
<tv_show>
<id>83237</id>
<name>Stargate Universe </name>
</tv_show>
<tv_show>
<id>70852</id>
<name>Stargate: Infinity </name>
</tv_show>
<tv_show>
<id>70851</id>
<name>Stargate Atlantis </name>
</tv_show>
</myService>