我有一个强类型视图,想在 NHaml 页面中使用它。
使用 WebForms 引擎,我将在<%@ Page%>
指令或代码隐藏文件中描述 ViewData 类型。
我将如何在 NHaml 中解决这个问题?
我有一个强类型视图,想在 NHaml 页面中使用它。
使用 WebForms 引擎,我将在<%@ Page%>
指令或代码隐藏文件中描述 ViewData 类型。
我将如何在 NHaml 中解决这个问题?
在这个页面上有一个补丁(搜索 NHaml)可以做到这一点。我不知道它是否有效。这需要来自 MvcContrib 的 NHaml。
NHaml View Engine 的补丁以升级它以与 MVC Preview 3 一起工作 在 NHamlView 上包含一个 Model 属性,以允许对 ViewDataDictionary 中的模型数据进行强类型访问,因为接口属性是非通用的,我们喜欢在 Views 中强类型化 ViewData 访问.. 例如,预览 2 下的 ViewData.Property 将成为预览 3 下的 Model.Property 应用 2008 年 5 月 30 日:在修订版 375 中应用。
鲍里斯
如果我理解正确,您只想拥有一个强类型的 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; }
}
希望有帮助
我将在 <%@ Page%> 指令或代码隐藏文件中描述 ViewData 类型。
我将如何在 NHaml 中解决这个问题?
你不需要这样做。您可以只使用模型而不指定其类型,它会起作用。例如:
%h2= Model.PageTitle
%p= Model.UserMessageOrSomething
这是因为 NHAML 视图被编译。因此,当模型上的所有属性(名称、类型等)都正确时,视图将被编译(就像源代码一样)。