1

Ich bin neu in Angular und Entity-Framework. Hier ist der Code von meinem AngularJS Controller:"Film" Model nehmen "Name" Eigenschaft des internen Objekts "Actors"

$scope.add = function() { 
    $scope.loading = true; 
    alert(this.newMovie.Name); 
    debugger; 
    $http.post('api/Movie/', this.newMovie).then(function onSuccess(response) { 
     alert("Added Successfully!!"); 
     debugger; 
     $scope.showAddMovieForm = false; 
     $scope.movies.push(response); 
     $scope.loading = false; 
    }).catch(function (response) { 
     $scope.error = "An Error has occured while adding movie! :(" + response.data; 
     $scope.loading = false; 
    }); 

}; 

Hier ist, wie die Action-Methode in meinem MovieController in MVC aussieht:

public HttpResponseMessage Post(Movie movie) 
{ 
    if (ModelState.IsValid) 
    { 
     // _db.People.Where(na => movie.Actors.Any(a => a.PersonId == na.PersonId)); 
     _db.Movies.Add(movie); 
     _db.SaveChanges(); 
     HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.Created, movie); 
     response.Headers.Location = new Uri(Url.Link("DefaultApi", new { movieId = movie.MovieId })); 
     return response; 
    } 
    else 
    { 
     return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState); 
    } 
} 

Filmmodell Klasse:

public partial class Movie 
{ 
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")] 
    public Movie() 
    { 
     this.Actors = new HashSet<Person>(); 
    } 

    public int MovieId { get; set; } 
    public string Name { get; set; } 
    public Nullable<short> YearOfRelease { get; set; } 
    public string Plot { get; set; } 
    public byte[] Poster { get; set; } 
    public Nullable<int> ProducerId { get; set; } 

    public virtual Person Producer { get; set; } 
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")] 
    public virtual ICollection<Person> Actors { get; set; } 
} 

Als ich Setzen Sie einen Debugger in den JS-Code Ich kann sehen, dass Angular das Objekt im richtigen Format übergibt.

Aber irgendwie, wenn es Aktion erreicht, nimmt das "Film" -Modell "Name" Eigenschaftswert "Schauspieler" -Objekt, das Teil von "Film" ist.

Debugger Screeshot:

ActionMethod, Movie Model Screenshot

Nicht in der Lage zu verstehen, warum "Movie" Modell der "Name" Eigenschaft "Schauspieler" erhält.

Antwort

1

Sie müssen die Art, wie Sie Ihr Actors-Objekt erstellen, im Movie-Objekt korrigieren.

Schauspieler sollte JS Array von Objekten sein und Ihr Film-Objekt sollte wie folgt aussehen, wenn Sie debuggen:

enter image description here

Aber in Ihrem Fall Schauspieler ist nur ein einzelnes Objekt. Ich hoffe es hilft.

+0

Ich sehe, ich hatte die gleichen Zweifel. Lassen Sie mich versuchen –

+0

@RohinTak Sicher, vergessen Sie nicht, als Antwort zu markieren, wenn es funktioniert hat. Vielen Dank. – User3250

+0

Vielen Dank, änderte meine Select-Eingabe in Multiselect und jetzt Array von Objekten zu bekommen. Dieses Problem wurde gelöst, andere Probleme warten jedoch bereits im Voraus auf mich. –

Verwandte Themen