2009-11-04 9 views
0

Pourquoi ne puis-je pas utiliser cette interface pour créer une vue fortement typée? Lorsque je prends l'élément exact et que je le convertis en une classe abstraite, il me permet de créer une vue fortement typée.Pourquoi une vue fortement typée ASP.NET MVC ne peut-elle pas utiliser une interface?

Je suis nouveau mais j'imagine qu'il y a quelque chose qui me manque, ASP.NET MVC peut fonctionner avec des interfaces, non?

Voici la classe spécifique dans la couche de persistance que j'essaie d'utiliser pour créer une vue fortement typée. J'essaie de créer ma première vue MVC.

+1

ASP.NET MVC ne supporte des vues fortement typées en utilisant des interfaces. Quels problèmes particuliers avez-vous? –

+0

Je ne peux pas avoir de classe de couche de données qui hérite d'un comportement basé sur les données, tout en implémentant l'interface de couche de modèle que je veux afficher sur une vue. – Maslow

+2

Je pense que vous avez peut-être mal lu le commentaire de Darin. ASP.NET MVC ** FAIT ** des interfaces de support. S'il vous plaît pouvez élaborer avec la classe abstraite et l'extrait de page maître? Merci. –

Répondre

0

Alors ce que je blesse faire est temporairement changer IAmAnAsset à une assez longue classe abstraite de sorte que la baisse avait Créer Voir le bas disponible, utilisé que pour créez la vue, puis rétablissez-la pour que la couche de persistance/base de données se compile à nouveau.

Voici ce qu'il m'a généré pour:

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<IEnumerable<AssetManagementModel.IAmAnAsset>>" %> 

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server"> 
Assets 
</asp:Content> 

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> 

<h2>ListAll</h2> 

<table> 
    <tr> 
     <th></th> 
     <th> 
      assetID 
     </th> 
     <th> 
      assetTag 
     </th> 
     <th> 
      AddedBy 
     </th> 
     <th> 
      addedDate 
     </th> 
     <th> 
      LocationId 
     </th> 
     <th> 
      purchasedDate 
     </th> 
     <th> 
      purchasedby 
     </th> 
     <th> 
      disposalDate 
     </th> 
     <th> 
      assetModelId 
     </th> 
     <th> 
      employeeId 
     </th> 
     <th> 
      depreciated 
     </th> 
    </tr> 

<% foreach (var item in Model) { %> 

    <tr> 
     <td> 
      <%= Html.ActionLink("Edit", "Edit", new { /* id=item.PrimaryKey */ }) %> | 
      <%= Html.ActionLink("Details", "Details", new { /* id=item.PrimaryKey */ })%> 
     </td> 
     <td> 
      <%= Html.Encode(item.assetID) %> 
     </td> 
     <td> 
      <%= Html.Encode(item.assetTag) %> 
     </td> 
     <td> 
      <%= Html.Encode(item.AddedBy) %> 
     </td> 
     <td> 
      <%= Html.Encode(String.Format("{0:g}", item.addedDate)) %> 
     </td> 
     <td> 
      <%= Html.Encode(item.LocationId) %> 
     </td> 
     <td> 
      <%= Html.Encode(String.Format("{0:g}", item.purchasedDate)) %> 
     </td> 
     <td> 
      <%= Html.Encode(item.purchasedby) %> 
     </td> 
     <td> 
      <%= Html.Encode(String.Format("{0:g}", item.disposalDate)) %> 
     </td> 
     <td> 
      <%= Html.Encode(item.assetModelId) %> 
     </td> 
     <td> 
      <%= Html.Encode(item.employeeId) %> 
     </td> 
     <td> 
      <%= Html.Encode(item.depreciated) %> 
     </td> 
    </tr> 

<% } %> 

</table> 

<p> 
    <%= Html.ActionLink("Create New", "Create") %> 
</p> 

</asp:Content> 
+0

Je devais faire cela pour l'index, créer et éditer des pages. Puisque si laissé en tant qu'interface il n'a généralisé aucune des propriétés. – Maslow

2

ASP.NET fonctionne parfaitement bien avec des interfaces:

public interface IAmAnAsset 
{ 
    int AssetID { get; set; } 
} 

public class AmAnAsset : IAmAnAsset 
{ 
    public int AssetID { get; set; } 
} 

public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     IAmAnAsset model = new AmAnAsset { AssetID = 10 }; 
     return View(model); 
    } 
} 

<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<IAmAnAsset>" %> 

<asp:Content ID="indexTitle" ContentPlaceHolderID="TitleContent" runat="server"> 
    Home Page 
</asp:Content> 

<asp:Content ID="indexContent" ContentPlaceHolderID="MainContent" runat="server"> 
    <p><%= Model.AssetID %></p> 
</asp:Content> 
+0

Lorsque je crée une vue, mon contrôleur n'est pas répertorié comme source pour une vue fortement typée? – Maslow

+0

Comment créez-vous vos vues? Je n'ai jamais utilisé l'assistant ASP.NET MVC pour ajouter des vues fortement typées. Peut-être que votre type de modèle d'interface ne figure pas dans la liste déroulante? Si c'est le cas, créez simplement votre vue manuellement comme dans mon exemple. –

+0

Vous voulez dire que votre INTERFACE n'est pas répertoriée? Cela n'a pas d'importance, remplacez simplement la directive de modèle Inherits manuellement dans votre vue. – Palantir

Questions connexes