長年 Web フォームを作成した後、MVC に移行しようとしています。Datatables から離れて、モデル クラスを適切に作成する方法を理解するのに苦労しています。大きな問題は、私のデータソースが XML を返す安らかな Web サービスであることです。
現在、ビューのモデルをデータテーブルとして強く入力しています。モデルクラスを使用しないことで何かをあきらめているのですか? コントローラーに多くの情報を含めていますか?
以下は、クエリ文字列の値を取得し、安静な 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>