Ajax - strzela pustymi modelami do metody kontrolera - ASP NET MVC 5

0

Hej, potrzebuje pomocy w zakresie ajaxa. Mam 2 formy które chcę zserializować i wysłać jak parametry do metody kontrolera. Mój kod :

    var partner1= $("#PartnerForm1").serialize();
    var partner2= $("#PartnerForm2").serialize();

    $.ajax({
        url: "/App/SaveChanges",
        type: 'POST',
        data: { firstPartner: partner1, secendPartner: partner2},
        success: function (data) {  
        }
    });

Metoda Kontrolera:

   [HttpPost]
        public void SaveChanges(PartnerViewModel firstPartner, PartnerViewModel secendPartner)
        {
           
        }

Problem polega na tym, że przy obecnym kodzie, w metodzie kontrolera otrzymuję parametry = null. A jesli wyświetle w konsoli obiekty partner1 i partner2 są okej serializowane. Zauważyłem, że problem nie występuje gdy zrobię takie coś:

var partner1= $("#PartnerForm1").serialize();
    var partner2= $("#PartnerForm2").serialize();

    $.ajax({
        url: "/App/SaveChanges",
        type: 'POST',
        data: partner1 ,
        success: function (data) {  
        }
    });

i metoda kontrolera :

[HttpPost]
        public void SaveChanges(PartnerViewModel firstPartner)
        {
           
        }

Wtedy wszystko działa poprawnie. Więc problem pojawia się przy próbie przekazania 2 wartości, bo dla 1 wszystko działa poprawnie. Działanie tego musi być poprzez ajax (nie mogę dodać w formie jakiegoś buttona submita, który by wywoływał metodę POST).

1

wysyłasz obiekt, który ma pola firstPartner i secondPartner a nie 2 osobne obiekty

0

Hmm, możesz mi doradzić w jaki sposób przesłać 2 osobne obiekty?

1
amator963 napisał(a):

Hmm, możesz mi doradzić w jaki sposób przesłać 2 osobne obiekty?

To zależy co chcesz wysłać:

  • listę obiektów
  • obiekt, który zawiera te 2 pola

tu jedno rozwiązanie: https://stackoverflow.com/questions/14407458/webapi-multiple-put-post-parameters
a tu inne: https://stackoverflow.com/questions/309115/how-can-i-post-an-array-of-string-to-asp-net-mvc-controller-without-a-form

ale osobiście zrobiłbym coś takiego i przyjął to jako parametr w kontrolerze:

class RequestDto 
{
  public PartnerViewModel FirstPartner { get; set; }
  public PartnerViewModel SecondPartner { get; set; }
}
0

Czyli jak rozumiem. Powiniem te 2 obiekty (chodzi o skrypt) wrzucic do jednego. Następnie zserializować, następnie przekonwertować do JSONa następnie przesłać jako string i w kontrolerze zdeserializować?

1

Jeśli dodasz to co kolega wyżej napisał do aplikacji i w metodzie kontrolera odbierzesz taki oto obiekt to powinno Ci zadziałaś w tej wersji w której próbowałeś wcześniej

0

Hmm, czyli dobrze rozumiem, że przesłać w AJAX dane w ten sposób:

   data: { firstPartner: partner1, secendPartner: partner2},

Ale w kontrolerze, zmienić typ parametrów na string, i później jakoś przekonwertować string na obiekty?

0

Zrobiłem obiekt taki jak @boska_cebula polecił. W ajaxie dodałem wpis :

var requestDto = {
       FirstPartner: partner1,
       SecendPartner: partner2
   };

   $.ajax({
       url: "/App/SaveChanges",
       type: 'POST',
       data: requestDto,
       success: function (data) {  
       }
   });

Ale ciągle otrzymuję w tych obiektach FirstPartner i SecendPartner nulle:(

0

Ostatecznie udało mi się rozwiązać problem z pewnymi problemami. Dzięki wszystkim za pomoc

0

Sorki, zapomniałem napisać. Tak jak @Phoryn zasugerował, źle przekazywałem parametry z formularza do JS'a

1 użytkowników online, w tym zalogowanych: 0, gości: 1