vues fortement typés dans NHaml?
-
22-09-2019 - |
Question
J'ai vue fortement typé et que vous souhaitez l'utiliser dans une page NHaml.
Avec le moteur WebForms je décrirais le type ViewData dans la directive <%@ Page%>
ou dans le fichier codebehind.
Comment pourrais-je aller à ce sujet dans NHaml?
La solution
Boris
Si je comprends bien, vous voulez juste avoir une forte vue nhaml dactylographiée?
Si tel est le cas, il est un exemple de projet dans svn qui fait cela. Jetez un coup d'oeil à
http://nhaml.googlecode.com/svn/trunk/src et le projet NHaml.Samples.Mvc.CSharp
Et voici un code extrait
Contrôleur
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 );
}
}
Afficher
%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")
Voir le modèle
public class ProductsEditViewData
{
public Product Product { get; set; }
public SelectList Suppliers { get; set; }
public SelectList Categories { get; set; }
}
L'espoir qui aide
Autres conseils
cette page il y a un patch (recherche NHaml) pour faire ça. Je ne sais pas si cela fonctionne. Cela nécessite NHaml de MvcContrib.
Patch pour NHaml View Engine mise à niveau à travailler avec MVC Preview 3 inclus une propriété de type sur NHamlView de la permettre un accès fortement typé au des données de modèle dans le ViewDataDictionary comme la propriété d'interface est non générique et nous aimons typer notre accès ViewData .. Vues dans les par exemple. ViewData.Property sous Preview 2 deviendrait Model.Property sous Aperçu 3 appliquées 30 mai 2008: appliquée en révision 375.
Je dirais que le type ViewData dans la directive <% @ Page%> ou dans la fichier codebehind.
Comment pourrais-je aller à ce sujet dans NHaml?
ne ont pas besoin de le faire . Vous pouvez il suffit d'utiliser le modèle sans préciser son type et cela fonctionnera. Par exemple:
%h2= Model.PageTitle
%p= Model.UserMessageOrSomething
En effet, la vue NHAML est compilée. Ainsi, lorsque toutes les propriétés du modèle sont corrects (noms, types, etc.) sera compilé le point de vue (code source serait).