ASP.net mvc EntityCollection является нулевым при сохранении - PullRequest
1 голос
/ 13 января 2011

Я пытался выяснить это уже более суток, но я просто не могу заставить это работать.У меня есть веб-сайт asp.net MVC, который использует структуру лица для своей модели данных.Мне нужно иметь возможность редактировать сложную Release сущность, которая содержит List<ReleaseDescription>

. У меня есть следующая модель (очевидно, я не могу загрузить картинки, поэтому я просто наберу ее):

public class Release
{
    public string Version
    ..some other primitive properties
    public EntityCollection<ReleaseDescription>
}

public class ReleaseDescription
{
    public string Description
    public Language Language
}

public class Language
{
    public string ISOCode
    public string Description
}

При поиске решения этой проблемы в Интернете.Я обнаружил, что использование EntityCollection (см. Список Release.ReleaseDescription) не является хорошей идеей, поэтому в частичном классе Release я создал дополнительное свойство ReleaseDescriptionList, которое преобразует эту entityCollection в List<ReleaseDescription> через геттер.нет установщика.

Проблема в том, что при сохранении my release.ReleaseDescription или даже release.ReleaseDescriptionList всегда пусто, когда в нем должны быть элементы.

Здесь следует остальная часть моего кода:

Мой код Edit.aspx выглядит следующим образом

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<Server.DM.Release>" %>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
    <h2>Edit</h2>
    <% using (Html.BeginForm()) {%>
        <%: Html.ValidationSummary(true) %>

        ... (Code for the primitive properties (works all fine)

        <fieldset>
            <legend>Descriptions</legend>

                <% for(var i =0; i<Model.ListReleaseDescriptions.Count; i++)
                {%>
                   <%: Html.EditorFor(x => Model.ListReleaseDescriptions[i], "ReleaseDescriptionRow")%>
                <%} %>

                <%= Html.ActionLink("Add another...", "AddDescription", Model) %>

        </fieldset>

        <p>
            <input type="submit" value="Save" />
        </p>

    <% } %>

    <div>
        <%: Html.ActionLink("Back to List", "Index") %>
    </div>

</asp:Content>

Код asp в DescriptionRelease выглядит следующим образом:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<Server.DM.ReleaseDescription>" %>Language: <%= Html.TextBoxFor(x => x.Language.ISOCode) %>Qty: <%=Html.TextBoxFor(x => x.Description)%>

(я не смог получить вышекодовый блок на нескольких строках извините)

Когда я нажимаю кнопку сохранения на экране редактирования и попадаю на свой ActionController,

[HttpPost]
    public ActionResult Edit(Release release)

release.DescriptionRelease не содержит никаких данных, когда 3 элемента должны бытьв этом.Любая помощь приветствуется в решении этой проблемы!

(ps: да, я знаю, что на этом и других форумах есть похожие темы, но ни одна из них мне не подходит.)

1 Ответ

0 голосов
/ 14 января 2011

ОК, после долгих поисков я наконец нашел ответ на свою проблему.

Я уже создал дополнительное свойство, чтобы компенсировать EntityCollection, но оно выглядело так:

public IList<ReleaseDescription> ListReleaseDescription
{
    get
    {
        return ReleaseDescription.ToList();
    }
}

Это не сработало, поэтому я сделал из этого простое свойство:

public IList<ReleaseDescription> ListReleaseDescription{get; set;}

и я заполнил это свойство в моем контроллере. Это, наконец, решило мою проблему, и я вернул все данные при сохранении! Я не могу поверить, что потратил на это 1,5 дня, когда решение было таким простым.

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