Как сделать значения массива читаемыми в контроллере C # MVC - PullRequest
0 голосов
/ 27 сентября 2019

У меня есть определенные поля ввода со значениями массива, но когда я передал его в свой контроллер, у определенных полей нет только значений [объекты], но когда я вывожу в console.log, все значения там,вот мои коды

function fLDetails() {
        flIntinerary = $("[name='Itinerary']").map(function () {
            return {
                itinerayTitle: $(this).find("input[name='ItineraryTitle']").val(),
                itinerayDes: $(this).find("textarea[name='ItineraryDes']").val()
            };
        });
        $("#primaryItineraryName").val(flIntinerary);
    }




$("#btnPackageSave").click(function (e) {
        e.preventDefault(e);
        fLDetails();
        var packageForm = $("#packageForm");
        if (!packageForm.valid()) {
            return false;
        }
        var url = packageForm.attr("action");
        var fromData = packageForm.serialize();
        $.post(url, fromData, function (data) {
        });
    });

контроллер

[![\[HttpPost\]
        public ActionResult AddPackage(TourPackage package)
        {

            if (ModelState.IsValid)
            {

            }
            return View();
        }

MY form screenshot

controller output

вот моя модель

public class TourPackage
    {
        [Display(Name = "Package name")]
        [Required(ErrorMessage = "Please enter package name!")]
        public string p_name { get; set; }

        [Display(Name = "Package price")]
        [Required(ErrorMessage = "Please enter package price")]
        public string p_price { get; set; }

        [Display(Name = "Travel Date(s)")]
        [Required(ErrorMessage = "Please select a travel date(s)!")]
        public List<DateTime> p_traveldate { get; set; }

        [Display(Name = "Bedroom type")]
        [Required(ErrorMessage = "Please select a Bedroom type")]
        public string p_bedroom { get; set; }

        [Display(Name = "Flight details")]
        [Required(ErrorMessage = "Please enter flight details")]
        public List<string> p_flghtdetails { get; set; }

        [Display(Name = "Inclusions")]
        [Required(ErrorMessage = "Please enter exclusion(s)")]
        public List<string> p_inclusion { get; set; }

        [Display(Name = "Itinerary")]
        [Required(ErrorMessage = "Please enter itinerary name!")]
        public List<string> p_itineraryName { get; set; }

        [Display(Name = "Itinerary description")]
        [Required(ErrorMessage = "Please enter itinerary description!")]
        public string p_itineraryDescription { get; set; }

        [Display(Name = "Terms and Conditions")]
        [Required(ErrorMessage = "Please enter terms and conditions!")]
        public string p_termCondition { get; set; }

        [Display(Name = "Exclusion")]
        [Required(ErrorMessage = "Please enter exclusion!")]
        public string p_exclusion { get; set; }

        [Display(Name = "Header image")]
        public string p_imgHeader { get; set; }

        [Display(Name = "Image slides")]
        [Required(ErrorMessage = "Please select an image!")]
        public string p_imgSlide { get; set; }
    }

Я пробую оба ответа ниже, но все еще не работает (переменные массива показывают только [объекты])

Ответы [ 5 ]

0 голосов
/ 29 сентября 2019

Если бы я использовал serializeArray следующим образом, то var fromData = packageForm.serializeArray ();

здесь вывод, когда я делаю это console.log (fromData);

enter image description here

0 голосов
/ 29 сентября 2019

Я обновляю свою модель TourPackage, но никаких изменений не происходит

public class TourPackage
    {
        [Display(Name = "Package name")]
        [Required(ErrorMessage = "Please enter package name!")]
        public string p_name { get; set; }

        [Display(Name = "Package price")]
        [Required(ErrorMessage = "Please enter package price")]
        public string p_price { get; set; }

        [Display(Name = "Travel Date(s)")]
        [Required(ErrorMessage = "Please select a travel date(s)!")]
        public List<TravelDates> p_traveldate { get; set; }

        [Display(Name = "Bedroom type")]
        [Required(ErrorMessage = "Please select a Bedroom type")]
        public string p_bedroom { get; set; }

        [Display(Name = "Flight details")]
        [Required(ErrorMessage = "Please enter flight details")]
        public List<FlightDetails> p_flghtdetails { get; set; }

        [Display(Name = "Inclusions")]
        [Required(ErrorMessage = "Please enter exclusion(s)")]
        public List<Inclusion> p_inclusion { get; set; }

        public List<Itinerary> ItineraryName { get; set; }

        [Display(Name = "Terms and Conditions")]
        [Required(ErrorMessage = "Please enter terms and conditions!")]
        public List<TermsAndConditions> p_termCondition { get; set; }

        [Display(Name = "Exclusion")]
        [Required(ErrorMessage = "Please enter exclusion!")]
        public List<Exclussion> p_exclusion { get; set; }

        [Display(Name = "Header image")]
        public string p_imgHeader { get; set; }

        [Display(Name = "Image slides")]
        [Required(ErrorMessage = "Please select an image!")]
        public List<Sliders> p_imgSlide { get; set; }
    }

    public class FlightDetails
    {
        public string flightdetails { get; set; }
    }

    public class Inclusion
    {
        public string inclusion { get; set; }
    }

    public class TermsAndConditions
    {
        public string termsandCon { get; set; } 
    }

    public class Sliders
    {
        public string imgpath { get; set; }
    }

    public class Exclussion
    {
        public string exclusion { get; set; }
    }

    public class TravelDates
    {
        public DateTime from { get; set; }
        public DateTime to { get; set; }
    }

    public class Itinerary
    {

        public string ItineraryName { get; set; }
        public string ItineraryDescription { get; set; }
    }
0 голосов
/ 27 сентября 2019

Вы можете сделать что-то вроде этого:

fLDetails(); 
var packageForm = $("#packageForm");
if (!packageForm.valid()) {
     return false;
 }
 var url = packageForm.attr("action");

    $.ajax({
        url: 'url',
        type: 'POST',
        contentType: 'application/json; charset=utf-8',
        dataType: "json",
        contentType: 'application/json',
        data: packageForm.serialize()
    }); 

И ваш Controller метод:

[HttpPost]
public JsonResult AddPackage(List<TourPackage> package)
{
  //Iterate over your package to get required data
}
0 голосов
/ 29 сентября 2019

здесь вывод console.log, все мои введенные значения находятся в выводе журналов,

enter image description here

здесь мой контроллер

enter image description here

0 голосов
/ 27 сентября 2019

При каждом нажатии кнопки вы добавляете значения в массив: предположим, что все значения массива находятся в flIntinerary

 var postData = { values: flIntinerary}; 

Следовательно, передайте postData через ajax

ЗатемВаша модель должна быть как

public TourPackage {
    public list<string> values {get; set;}
}

, а контроллер - как:

 public ActionResult AddPackage(TourPackage postData)
        {

            if (ModelState.IsValid)
            {

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