Jquery Array Передать его в BackEnd C# MVC - PullRequest
0 голосов
/ 21 января 2020

У меня есть массив JQuery, и он должен быть передан бэкэнду. Но он не передан. Здесь я вставил кодирующие части.

TuitionDTO

 public class TuitionDTO
{
    public int TuitionId { get; set; }
    public string TuitionTitle { get; set; }

    public List<ClassCoverageDTO> ClassCoverage { get; set; }
}

ClassCoverageDTO

  public class ClassCoverageDTO
{
    public int ClassCoverageId { get; set; }
    public int TuitionId { get; set; }
    public int DistrictId { get; set; }
    public int CityId { get; set; }
    public string Place { get; set; }
    public DateTime? AddedDate { get; set; }
    public string AddedBy { get; set; }
    public DateTime? ModifiedDate { get; set; }
    public string ModifiedBy { get; set; }
    public bool? IsActive { get; set; }

    //Display Purpose Only
    public string DistrictName { get; set; }
    public string CityName { get; set; }
}

Добавить элементы в JQuery Массив

    function AddClassCoverage(_districtId, _cityId, _place, _districtName, _cityName) {
$('<tr id=' + rowId + '><td id=' + _districtId + '>' + _districtName + '</td><td id=' + _cityId + '>' + _cityName + '</td><td id=' + _place + '>' + _place + '<td id="my">X</td></tr>').appendTo("#responsive-table-example tbody");

            var coverage = {
                DistrictId: _districtId,
                CityId: _cityId,
                Place: _place,
                DistrictName: _districtName,
                CityName: _cityName
        };
        CoverageItemsArr.push(coverage);
 rowId++;

}

HTML PART

    <div class="col-sm-12">
                            <div class="form-group">
                                <label>Add Class Coverage<span id="ast">*</span></label>
                                <table id="responsive-table-example" class="table table-bordered table-striped table-condensed">
                                    <thead>
                                        <tr>
                                            <th>District</th>
                                            <th>City/Town</th>
                                            <th>Place</th>
                                            <th>Action</th>
                                        </tr>
                                        <tr>
                                            <th>
                                                <select class="form-control" name="district" id="iddistrict"></select>
                                            </th>
                                            <th>
                                                <select class="form-control" name="city" id="idcity"></select>
                                            </th>
                                            <th> <input class="form-control input-sm" type="text" placeholder="" name="place" id="idplace"></th>
                                            <th><button type="button" class="btn btn-primary btn-sm" onclick="addClassCoverage()">Add</button></th>
                                        </tr>
                                    </thead>
                                    <tbody id="coveragetable"></tbody>
                                </table>
                            </div>
                        </div>

Добавить в FormData и передать его в бэкэнд

//Append to FormData and Send to Backend via AJAX CALL

        formData.append("ClassCoverage", CoverageItemsArr)

        $.ajax({
            url: $("#addTuitionDetails").val(),
            cache: false,
            type: "POST",
            data: formData,
            mimeType: 'multipart/form-data',
            processData: false,
            contentType: false,
            cache: false,
            success: function (status) {
              alert("Success");
            }
        });
        return true;

Ответы [ 2 ]

0 голосов
/ 21 января 2020

Предполагая, что TuitionDTO является параметром действия вашего контроллера, я бы попробовал это (просто чтобы увидеть, правильно ли привязываются значения): Замените строку formData.append("ClassCoverage", CoverageItemsArr) на жестко закодированное значение:

var formData =
{
    TuitionId: 1,
    TuitionTitle: "Tuition title",
    ClassCoverage: [
        {
                DistrictId: 1,
                CityId: 1,
                Place: "Some place",
                DistrictName: "Some district",
                CityName: "Some city",
                ClassCoverageId: 1,
                TuitionId: 1,
                AddedBy: "someone",
                ModifiedBy: "someone else"
        },
        {
                DistrictId: 2,
                CityId: 2,
                Place: "Some other place",
                DistrictName: "Some other district",
                CityName: "Some other city",
                ClassCoverageId: 2,
                TuitionId: 2,
                AddedBy: "someone",
                ModifiedBy: "someone else"
        }
    ]
}

Попробуйте это. Если это работает, просто замените фактические значения и ClassCoverage следующим образом:

var formData =
{
    TuitionId: $("#whatever_holds_it").val(),
    TuitionTitle: $("#whatever_holds_title").val(),
    ClassCoverage: CoverageItemsArr
}

Если это еще не работает, попробуйте установить все свойства объекта покрытия и посмотрите, что произойдет. В противном случае нам понадобится действие вашего контроллера (только его подпись, а не тело). Убедитесь, что у вас есть атрибут [HttpPost] над вашим действием.

0 голосов
/ 21 января 2020

у вас есть контроллер, который должен обрабатывать запрос ajax?

   [HttpPost]
  public ActionResult AjaxRequest(string yourvalue)
    {
        string returendvalue = "";
        return Json(returendvalue, JsonRequestBehavior.AllowGet);
    }

'

вот пример для функции контроллера,

теперь в запросе ajax

     $.ajax({
        url:'@Url.RouteUrl(new { action="AjaxRequest",Controller="Your Controller"})',
        cache: false,
        type: "POST",
        data: formData,
        dataType: "json",
        contentType: "application/json; charset=utf-8",
        mimeType: 'multipart/form-data',
        processData: false,
        contentType: false,
        cache: false,
        success: function (status) {
          alert("Success");
        }
    });
...