2011-01-13 31 views
1

Ich habe versucht, dies für mehr als einen Tag jetzt herauszufinden, aber ich kann es einfach nicht funktionieren. Ich habe eine asp.net MVC-Website, die das Entityframework für sein Datamodel verwendet. Ich brauche eine komplexe Release Entität bearbeiten zu können, die eine enthält List<ReleaseDescription>ASP.net mvc EntityCollection ist null beim Speichern

Ich habe folgendes Modell (Apparantly kann ich keine Bilder hochladen, damit ich es nur aus geben werde):

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 
} 

Bei der Suche für eine Lösung für dieses Problem im Web. Ich fand heraus, dass eine EntityCollection (siehe Liste Release.ReleaseDescription) ist keine gute Idee, so in der Teilklasse Release ich eine zusätzliche Eigenschaft ReleaseDescriptionList gemacht, die diese EntityCollection in ein List<ReleaseDescription> durch den Getter verwandelt, es keine Setter hat.

Das Problem ist, dass beim Speichern, meine release.ReleaseDescription oder sogar die release.ReleaseDescriptionList immer leer ist, wenn Elemente darin sein sollten.

folgt hier den Rest meines Code:

Mein Edit.aspx Code

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

der ASP-Code in der DescriptionRelease sieht wie folgt wie folgt aussieht:

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

(I konnte nicht über Codeblock in mehreren Zeilen Sorry)

Wenn ich auf die Schaltfläche Speichern klicken im Bearbeitungsbildschirm und ich zu meiner Action

[HttpPost] 
    public ActionResult Edit(Release release) 

release.DescriptionRelease keine Daten enthält, wenn drei Elemente in ihm sein sollten. Bei der Lösung dieses Problems ist jede Hilfe hilfreich!

(ps: Ja. Ich weiß, es gibt ähnliche Themen in diesem Forum und andere, aber nichts davon scheint für mich zu arbeiten)

Antwort

0

OK, Nach einem viel Sucherei fand ich endlich eine Antwort auf mein Problem.

Ich habe bereits eine zusätzliche Eigenschaft für das EntityCollection zu machen, aber es sah so aus:

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

Das ist nicht so dass ich wie so aus ihm eine einfache Eigenschaft funktionierte:

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

und ich besetzte diese Eigenschaft in meinem Controller. Das hat mein Problem endlich gelöst und ich habe alle Daten beim Speichern zurückbekommen! Ich kann nicht glauben, dass ich 1,5 Tage damit verschwendet habe, als die Lösung so einfach war.

Verwandte Themen