1

我有一个强类型视图,想在 NHaml 页面中使用它。

使用 WebForms 引擎,我将在<%@ Page%>指令或代码隐藏文件中描述 ViewData 类型。

我将如何在 NHaml 中解决这个问题?

4

3 回答 3

1

这个页面上有一个补丁(搜索 NHaml)可以做到这一点。我不知道它是否有效。这需要来自 MvcContrib 的 NHaml。

NHaml View Engine 的补丁以升级它以与 MVC Preview 3 一起工作 在 NHamlView 上包含一个 Model 属性,以允许对 ViewDataDictionary 中的模型数据进行强类型访问,因为接口属性是非通用的,我们喜欢在 Views 中强类型化 ViewData 访问.. 例如,预览 2 下的 ViewData.Property 将成为预览 3 下的 Model.Property 应用 2008 年 5 月 30 日:在修订版 375 中应用。

于 2009-11-24T14:59:11.797 回答
1

鲍里斯

如果我理解正确,您只想拥有一个强类型的 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; }
}

希望有帮助

于 2009-11-24T22:57:08.860 回答
1

我将在 <%@ Page%> 指令或代码隐藏文件中描述 ViewData 类型。

我将如何在 NHaml 中解决这个问题?

不需要这样做。您可以只使用模型而不指定其类型,它会起作用。例如:

%h2= Model.PageTitle
  %p= Model.UserMessageOrSomething

这是因为 NHAML 视图被编译。因此,当模型上的所有属性(名称、类型等)都正确时,视图将被编译(就像源代码一样)。

于 2009-11-25T00:26:15.733 回答