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