ASP.NET MVC Action Call из Javascript AJAX получает 500 внутренняя ошибка сервера - PullRequest
0 голосов
/ 11 мая 2019

Получение сообщения «500 Internal Server Error» при использовании ajax для вызова действия контроллера на сервере с веб-сайтом IIS 7.5.Процесс отлично работает в среде разработки localhost.

Процесс включает в себя вызов Ajax, который отправляет объект json методу действия контроллера, который затем отправляет обратно сообщение json.Я уже пытался создать собственный маршрут в файле Routeconfig, чтобы учесть имя сайта iis.IE, "http://localhost:3000/home" vs" http://{SiteName}/{defaultapplicationpage}.

Файл JS

        $.ajax({
            async: false,
            type: "POST",
            url: "/TimeEntryWeeklyReportsTest/Home/CheckIfRecordsExist",
            //url: "/Home/CheckIfRecordsExist",
            data: '{ data:' + jsondata + '}',
            contentType: "application/json; charset=utf-8",
            dataType: "json"
        }).done(function (response) {
            console.log(response);
            if (response === "true") {
                var param = "&StartDate=" + data.StartDate + "&EndDate=" + data.EndDate;
                param = Employeefilter !== undefined ? param + "&" + Employeefilter + "=" + data.EmployeeUserid : param + "&Employee=" + data.EmployeeUserid;
                $('#successmsg').html("Successful");
                window.location.href = url + param + "&rs:Format=" + documentType;
            }
            else {
                $('#errmsg').html("No records found.");
                throw 'records not found error';
            }
        }).fail(function (response) {
            console.log('Error: ' + response);
        });

Контроллер CS

        [HttpPost]
        [Route("TimeEntryWeeklyReportsTest/Home/CheckIfRecordsExist")]
        public JsonResult CheckIfRecordsExist(FormData data)
        {
            string strID = GetIDFromUser((!String.IsNullOrEmpty(GetUser())) ? GetUser() : Environment.UserName);
            var results = timeEntry.TimeEntryReport(data.EmployeeSupervisor == "Supervisor" ? null : data.EmployeeUserid, data.EmployeeSupervisor == "Employee" ? null : data.EmployeeUserid, Convert.ToDateTime(data.Startdate), Convert.ToDateTime(data.Enddate)).ToList<TimeEntryReport_Result>();
            if (results.Count != 0)
            {
                return Json("true", JsonRequestBehavior.AllowGet);
            }
            else
            {
                return Json("false", JsonRequestBehavior.AllowGet);
            }
        }

RouteConfig

    public class RouteConfig
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                name: "CheckIfRecordsExist",
                url: "TimeEntryWeeklyReportsTest/{controller}/{action}",
                defaults: new { controller = "Home", action = "CheckIfRecordsExist" }
            );
            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );
        }
    }

TheОжидаемый результат - метод должен возвращать утверждение «истина» или «ложь».Похоже, что вызов ajax не обработан и получена внутренняя ошибка 500.

1 Ответ

1 голос
/ 11 мая 2019

Попробуйте в вашем контроллере, как это, чтобы обслуживать JSON и использовал это в JavaScript

 public async Task<JsonResult> DonutChartData()
        {
            int tagIn = (await db.Tag.Where(x => x.IsIn == true).ToListAsync()).Count;
            int cardIn = (await db.Entry.Where(c => c.Type == Type.Card).Where(x => x.IsExit == false).ToListAsync()).Count;
            int reservedIn = (await db.Cars.Where(c => c.Type == Type.Pin).Where(x => x.IsExit == false).ToListAsync()).Count;
            DonutChart _chart = new DonutChart();
            _chart.labels = new string[] { "x", "y", "x" };
            _chart.datasets = new List<DonutChartDatasets>();
            List<DonutChartDatasets> _dataSet = new List<DonutChartDatasets>();
            _dataSet.Add(new DonutChartDatasets()
            {
                label = "Whois",
                //TO-DO: Add Reserve to Report
                data = new int[] { cardIn, tagIn, reservedIn },
                backgroundColor = new string[] { "rgba(54, 162, 235,0.5)", "rgba(255, 205, 86,0.5)", "rgba(255,99,132,0.5)" },
                borderColor = new string[] { "rgb(54, 162, 235)", "rgb(255, 205, 86)", "rgb(255,99,132)" },
                borderWidth = "1"
            });
            _chart.datasets = _dataSet;
            return Json(_chart, JsonRequestBehavior.AllowGet);
        }

А в вашем представлении скрипт использовал данные таким образом:

 jQuery.extend({
            getValues: function (url) {
                var result = null;
                $.ajax({
                    url: url,
                    type: 'get',
                    contentType: "application/json; charset=utf-8",
                    dataType: "json",
                    async: false,
                    success: function (data) {
                        result = data;
                    }
                });
                return result;
            }
        });
...