Как добавить, отредактировать и отобразить один ко многим объектам отношений в ASP.Net MVC 2? - PullRequest
2 голосов
/ 13 марта 2010

Я ищу лучшие практики, соответствующие шаблону проектирования MVC.

Мои сущности имеют следующие отношения.
tblPortal PortalId PrortalName
tblPortalAlias ​​ AliasId PortalId HttpAlias ​​

Каждый портал может иметь много PortalAlias.

Я хочу добавить новый портал, а затем добавить связанный PortalAlias.

Я не совсем понимаю, как мне следует структурировать представления и как я должен представлять представления пользователю. Я ищу пример кода о том, как этого добиться.

Сначала я думаю о представлении портала, пусть пользователь добавит портал. Затем нажмите ссылку «Изменить» в представлении «Список портала» и в представлении «Редактирование портала» разрешите им добавлять PortalAlias.

Если это так, как должен выглядеть вид редактирования?

Пока у меня есть:

Редактировать Просмотр

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

1 Ответ

1 голос
/ 05 января 2011

Надеюсь, вы нашли ответ на этот вопрос в другом месте, хотя, основываясь на том, насколько сложно найти информацию об этом в Интернете, это, вероятно, маловероятно ...

Блог MSDN, связанный с ASP.NET MVC, Entity Framework, Изменение отношений один-ко-многим и многие-ко-многим (в первом параграфе есть ссылка на предыдущую в серии ).

Но Редактирование списка переменной длины в стиле ASP.NET MVC 2 выглядит немного лучше (и включает в себя пример кода).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...