厳密に型指定されたビューがあり、それを NHaml ページで使用したいと考えています。
WebForms エンジンでは、ViewData 型を<%@ Page%>
ディレクティブまたは分離コード ファイルに記述します。
NHaml でそれを行うにはどうすればよいでしょうか。
厳密に型指定されたビューがあり、それを NHaml ページで使用したいと考えています。
WebForms エンジンでは、ViewData 型を<%@ Page%>
ディレクティブまたは分離コード ファイルに記述します。
NHaml でそれを行うにはどうすればよいでしょうか。
このページには、これを行うためのパッチ(NHamlを検索)があります。それが機能するかどうかはわかりません。これには、MvcContribのNHamlが必要です。
NHaml ViewEngineがMVCプレビュー3で動作するようにアップグレードするためのパッチNHamlViewにModelプロパティが含まれているため、インターフェイスプロパティは一般的ではなく、Views内でViewDataアクセスを厳密に入力したいため、ViewDataDictionaryのモデルデータへの厳密に型指定されたアクセスが可能になります..たとえば、プレビュー2のViewData.Propertyは、プレビュー3のModel.Propertyになります。2008年5月30日適用:リビジョン375で適用。
<%@ Page%> ディレクティブまたは分離コード ファイルに ViewData 型を記述します。
NHaml でそれを行うにはどうすればよいでしょうか。
する必要はありません。タイプを指定せずにモデルを使用するだけで機能します。例えば:
%h2= Model.PageTitle
%p= Model.UserMessageOrSomething
これは、NHAML ビューがコンパイルされるためです。したがって、モデルのすべてのプロパティ (名前、型など) が正しい場合、ビューは (ソース コードと同様に) コンパイルされます。
ボリス
私が正しく理解していれば、強い型付けされた nhaml ビューが必要ですか?
この場合、svn にこれを行うサンプル プロジェクトがあります。見て
http://nhaml.googlecode.com/svn/trunk/srcおよび NHaml.Samples.Mvc.CSharp プロジェクト
そして、ここにいくつかの抽出されたコードがあります
コントローラ
public class ProductsController : Controller
{
private readonly NorthwindDataContext northwind = new NorthwindDataContext(
ConfigurationManager.ConnectionStrings["NorthwindConnectionString"].ConnectionString );
public ActionResult Edit( int id )
{
var viewData = new ProductsEditViewData { Product = northwind.GetProductById( id ) };
viewData.Categories = new SelectList( northwind.GetCategories(), "CategoryID", "CategoryName", viewData.Product.CategoryID );
viewData.Suppliers = new SelectList( northwind.GetSuppliers(), "SupplierID", "CompanyName", viewData.Product.SupplierID );
return View( "Edit", viewData );
}
}
意見
%h2= ViewData.Model.Product.ProductName
%form{action='#{Url.Action("Update", new { ID=ViewData.Model.Product.ProductID \})}' method="post"}
%table
%tr
%td Name:
%td= Html.TextBox("ProductName", ViewData.Model.Product.ProductName)
%tr
%td Category:
%td= Html.DropDownList("CategoryID", ViewData.Model.Categories, (string)null)
%tr
%td Supplier:
%td= Html.DropDownList("SupplierID", ViewData.Model.Suppliers, (string)null)
%tr
%td Unit Price:
%td= Html.TextBox("UnitPrice", ViewData.Model.Product.UnitPrice.ToString())
%p
- Html.RenderPartial(@"_Button")
モデルを見る
public class ProductsEditViewData
{
public Product Product { get; set; }
public SelectList Suppliers { get; set; }
public SelectList Categories { get; set; }
}
それが役立つことを願っています