Не удается добавить данные к элементу tbody с помощью метода Jquery append()

У меня есть приложение, разработанное на ASP.NET MVC5. Ниже приведен код контроллера:

namespace ACCOUNTS2.Controllers
{
public class SelectDealController : Controller
{
    private ACCOUNTSEntities db = new ACCOUNTSEntities();



    // GET: /SelectDeal/
    public ActionResult Index(string option,string search)
    {
        var sell_deal = db.Sell_Deal.Include(s => s.Client_Info);
        return View(sell_deal.ToList());
    }

    [HttpPost]
    public JsonResult GetSearchingData(string SearchBy, string SearchValue)
    {
        List<Sell_Deal> selldeal = new List<Sell_Deal>();
        if(SearchBy == "Dealer_Name")
        {

                string Dealer_Name = SearchValue;
                selldeal = db.Sell_Deal.Where(x => x.Dealer_Name.StartsWith(SearchValue) || SearchValue == null).ToList();


            return Json(selldeal, JsonRequestBehavior.AllowGet);
        }
        else if(SearchBy == "Location")
        {
            selldeal = db.Sell_Deal.Where(x => x.Location.StartsWith(SearchValue) || SearchValue == null).ToList();
            return Json(selldeal, JsonRequestBehavior.AllowGet);
        }
        else if (SearchBy == "Client_Name")
        {
            selldeal = db.Sell_Deal.Where(x => x.Client_Info.Client_Name.StartsWith(SearchValue) || SearchValue == null).ToList();
            return Json(selldeal, JsonRequestBehavior.AllowGet);
        }
        else
        {
            var sell_deal1 = db.Sell_Deal.Include(s => s.Client_Info).ToList();
            return Json(sell_deal1, JsonRequestBehavior.AllowGet);
        }
    }

Ниже приведен код моей модели:

namespace ACCOUNTS2
{
using System;
using System.Collections.Generic;



public partial class Sell_Deal
{
    public Sell_Deal()
    {
        this.Sell_Deal_Details = new HashSet<Sell_Deal_Details>();
    }

    public decimal Deal_ID { get; set; }
    public Nullable<System.DateTime> Deal_Date { get; set; }
    public Nullable<decimal> Total_Amount_Remaining { get; set; }
    public Nullable<decimal> Client_ID { get; set; }
    public string Dealer_Name { get; set; }
    public Nullable<System.DateTime> Validity_Date { get; set; }
    public string Location { get; set; }
    public Nullable<decimal> Deal_Amount { get; set; }

    public virtual Client_Info Client_Info { get; set; }
    public virtual ICollection<Sell_Deal_Details> Sell_Deal_Details { get; set; }
}

}

Ниже приведен мой код jquery в представлении:

 $(document).ready(function () {

    $("#BtnSearch").click(function () {
        var SearchBy = $("#SearchBy").val();
        var SearchValue = $("#Search").val();
        var SetData = $("#DataSearching");
        SetData.html("");
        $.ajax({
            type: "post",
            url: "/SelectDeal/GetSearchingData?SearchBy=" + SearchBy + "&SearchValue=" + SearchValue,
            datatype: JSON,
            contentType: "html",
            success: function (result) {
                if (result.length == 0) {
                    SetData.append('<tr style="color:red"><td colspan="3">No Match Data</td></tr>')
                }
                else {
                    $.each(result, function (Index, value) {
                        var val = "<tr>" +
                       "<td>" + value.Deal_Date + "</td>" +
                       "<td>" + value.Total_Amount_Remaining + "</td>" +
                       "<td>" + value.Dealer_Name + "</td>" +
                       "<td>" + value.Validity_Date + "</td>" +
                       "<td>" + value.Location + "</td>" +
                       "<td>" + value.Deal_Amount + "</td>" +
                       "<td>" + value.Client_Info.Client_Name + "</td>" +
                       "</tr>";

                        SetData.append(val)
                    });
                }
            }
        });
    });
});

Когда я нажимаю кнопку, я ожидаю, что отфильтрованные данные будут показаны в таблице в соответствии с логикой, прописанной в методе JsonResult в контроллере, но этого не происходит. Насколько я заметил, первым условием «если» в событии успеха ajax является добавление данных к элементу, но оно вообще не работает в теле «else» кода ajax. Я сделал что-то не так в своем коде? Нужно ли мне делать какие-либо исправления здесь? Пожалуйста помоги!


person Uzair Raza    schedule 01.01.2018    source источник


Ответы (1)


Ваш запрос Ajax недействителен. Удалите contentType: "html" и измените datatype: JSON на datatype: "json";

$.ajax({
    type: "post",
    url: "/SelectDeal/GetSearchingData?SearchBy=" + SearchBy + "&SearchValue=" + SearchValue,
    datatype: "json",
    success: function (result) {
        if (result.length == 0) {
            SetData.append('<tr style="color:red"><td colspan="3">No Match Data</td></tr>')
        }
        else {
            $.each(result, function (Index, value) {
                var val = "<tr>" +
               "<td>" + value.Deal_Date + "</td>" +
               "<td>" + value.Total_Amount_Remaining + "</td>" +
               "<td>" + value.Dealer_Name + "</td>" +
               "<td>" + value.Validity_Date + "</td>" +
               "<td>" + value.Location + "</td>" +
               "<td>" + value.Deal_Amount + "</td>" +
               "<td>" + value.Client_Info.Client_Name + "</td>" +
               "</tr>";

                SetData.append(val)
            });
        }
    }
});

Кроме того, вы применяете запрос Post, но параметры SearchBy и SearchValue передаются на сервер через GET. Это неправильный способ его выполнения. Разместите параметры в теле запроса, а не в URL-адресе.

person lucky    schedule 01.01.2018
comment
Большое спасибо за ответ. Что вы подразумеваете под «разместить параметры в теле запроса, а не в URL-адресе»? Как опубликовать тело запроса в URL-адресе? - person Uzair Raza; 02.01.2018
comment
Ну, вы не можете размещать что-либо в URL. Вы можете создать объект из параметров SearchBy и SearchValue, сериализовать его в json и отправить на сервер. И вы должны создать класс модели для обработки этого запроса. Есть очень хорошее объяснение. docs.microsoft.com/en-us/aspnet/web-api/overview/ - person lucky; 02.01.2018
comment
Параметры SearchBy и SearchValue создаются и устанавливаются в представлении при нажатии кнопки, а затем отправляются в метод JsonResult контроллера для обработки. Где именно я должен создавать объекты из параметров SearchBy и SearchValue? Я как-то в недоумении. Где именно я должен внести изменения в свое приложение? А также, где я должен сериализовать параметры в Json? - person Uzair Raza; 02.01.2018
comment
Вы должны сериализовать объект на стороне клиента json. Вы можете просмотреть эту статью. stackoverflow.com/questions/48020084/ - person lucky; 02.01.2018