2010-03-12 2 views
2

Je suis à la recherche de bonnes pratiques conformes au modèle de conception MVC.Comment ajouter, éditer et afficher une ou plusieurs entités relationnelles dans ASP.Net MVC 2?

Mes entités ont la relation suivante.
tblPortal PortalId PrortalName
tblPortalAlias ​​ AliasId PortalId HttpAlias ​​

Chaque portail peut avoir plusieurs PortalAlias.

Je souhaite ajouter un nouveau portail, puis ajouter l'alias PortalAlias ​​associé.

Je suis confus sur la façon dont je structurer les vues et comment je présenter les vues à l'utilisateur. Je cherche un exemple de code sur la façon d'accomplir cela.

Mes pensées sont d'abord présenter la vue du portail, laissez l'utilisateur ajouter le portail. Cliquez ensuite sur le lien Modifier dans la vue Liste du portail et sur la vue d'édition du portail, ajoutez-les à l'élément PortalAlias.

Si oui, à quoi devrait ressembler la vue d'édition?

Jusqu'à présent, j'ai:

Modifier Voir

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

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server"> 
Edit 
</asp:Content> 
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> 
<h2>Edit</h2> 
<% Html.RenderPartial("PortalForm", Model); %> 
<div> 
    <%= Html.ActionLink("Back to List", "Index") %> 
</div> 
</asp:Content> 

PortalForm

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<MyProject.Mvc.Models.PortalFormViewModel>" %> 
<%= Html.ValidationSummary("Please correct the errors and try again.") %> 
<% using (Html.BeginForm()) {%> 
    <%= Html.ValidationSummary(true) %> 

    <fieldset> 
     <legend>Fields</legend> 

     <div class="editor-label"> 
      <%= Html.LabelFor(model => model.Portal.PortalId) %> 
     </div> 
     <div class="editor-field"> 
      <%= Html.TextBoxFor(model => model.Portal.PortalId) %> 
      <%= Html.ValidationMessageFor(model => model.Portal.PortalId) %> 
     </div> 

     <div class="editor-label"> 
      <%= Html.LabelFor(model => model.Portal.PortalName) %> 
     </div> 
     <div class="editor-field"> 
      <%= Html.TextBoxFor(model => model.Portal.PortalName) %> 
      <%= Html.ValidationMessageFor(model => model.Portal.PortalName) %> 
     </div>    
     <p> 
      <input type="submit" value="Save" /> 
     </p> 
    </fieldset> 

<% } %> 
Alias<br /><%-- This display is for debug --%> 
<% foreach (var item in Model.PortalAlias) { %> 

<%= item.HTTPAlias %><br /> 

<% } %> 

PortalFormViewModel

public class PortalFormViewModel 
{ 
    public Portal Portal { get; private set; } 
    public IEnumerable<PortalAlias> PortalAlias { get; private set; } 

    public PortalFormViewModel() 
    { 
     Portal = new Portal(); 
    } 

    public PortalFormViewModel(Portal portal) 
    { 
     Portal = portal; 
     PortalAlias = portal.PortalAlias; 
    } 
} 

Répondre

1

Espérons que vous avez trouvé une réponse à cette ailleurs, bien que basé sur la façon dont il est difficile de trouver des informations à ce sujet en ligne, il est probablement peu probable ...

un blog MSDN lié à plus ASP.NET MVC, Entity Framework, Modifying One-to-Many and Many-to-Many Relationships (il y a lien vers le précédent dans la série dans le premier paragraphe).

Mais Editing a variable length list, ASP.NET MVC 2-style semble un peu mieux (et comprend un exemple de code).

+0

Le post de Knockout de Steve est un moyen encore meilleur d'éditer des relations un-à-plusieurs. http://blog.stevensanderson.com/2010/07/12/editing-a-variable-length-list-knockout-style/ – Ryan

+0

Merci @Ryan pour le lien supplémentaire. Je pensais que cet exemple me semblait familier, et maintenant je sais pourquoi. Dommage qu'il n'ait pas lié le plus vieux au plus récent, mais ... bonne trouvaille! –

+1

@KasperSkov, je pense que ce pourrait être un problème GitHub. La source d'image est http://demo.stevensanderson.com/ko_gift_editor/ qui est 404ing pour moi. Mais j'ai aussi reçu le message dans Chrome (dans une boîte de message). http://knockoutjs.com/examples/gridEditor.html pourrait être un semi-match. (Aucun lien e-mail, et je me suis arrêté à utiliser Twitter, donc j'ai renoncé à essayer de contacter Steve au sujet de la question.) –

Questions connexes