0 votes

Pourquoi une vue fortement typée ASP.NET MVC ne peut-elle pas utiliser une interface ?

Pourquoi ne puis-je pas utiliser cette interface pour créer une vue fortement typée ?

public interface IAmAnAsset
{
    int assetID { get; }
    String assetTag { get; set; }
    int? AddedBy { get; set; }
    DateTime addedDate { get; set; }
    int? LocationId { get; set; }
    DateTime? purchasedDate { get; set; }
    int? purchasedby { get; set; }
    DateTime? disposalDate { get; set; }
    int assetModelId { get; set; }
    int? employeeId { get; set; }
    float? depreciated { get; set; }
    IAmAComputer Computer { get;  }
}

Lorsque je prends cet élément exact et que je le convertis en une classe abstraite, cela me permet de créer une vue fortement typée.

Je suis nouveau mais j'imagine qu'il y a quelque chose qui m'échappe. ASP.NET MVC peut fonctionner avec des interfaces, n'est-ce pas ?

Voici la classe spécifique de la couche de persistance que j'essaie d'utiliser pour créer une vue fortement typée.

public class ModelAsset : BufferedLinqEntity2<LqGpsDataContext, asset>, AssetManagementModel.IAmAnAsset
{
...
}

J'essaie de créer ma première vue MVC.

2voto

Darin Dimitrov Points 528142

ASP.NET fonctionne parfaitement bien avec les 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>

0voto

Maslow Points 7268

Ce que j'ai fini par faire, c'est de changer temporairement IAmAnAsset en une classe abstraite suffisamment longtemps pour que la liste déroulante Create View soit disponible, de l'utiliser pour créer la vue, puis de la changer à nouveau pour que la couche de persistance/base de données compile à nouveau.

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

<%@ 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>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X