【问题标题】:Sending strings to MVC Controller via AJAX通过 AJAX 向 MVC 控制器发送字符串
【发布时间】:2020-09-21 05:56:44
【问题描述】:

我正在尝试通过 AJAX 向 MVC 控制器方法发送数据。我正在尝试制作预订系统应用程序。我想检查实体模型中是否存在用户输入。 Ajax 正在将参数推送到方法控制器,但我没有得到响应。

这是我在 View 中的 AJAX 调用:

   var check = document.getElementById('check');
        //starttime.onchange = checkvalidate(startdate, starttime);
        $(check).click(function (datevalue, timevalue) {
            var startdate = document.getElementById('startdate');
            var starttime = document.getElementById('starttime');
            var log = document.getElementById('log');
            var datevalue = startdate.value;
            var timevalue = starttime.value;
            $.ajax({
                type: "POST",
                url: "/Home/CheckValidate",
                data: { 'start': datevalue, 'time': timevalue },
                dataType: "Boolean",
                success: function (response) {
                    console.log = response;
                    if (response == true) {
                        log.value = "YES";
                    } else
                    {
                        log.value = "NO";
                    }
                }
            })
        })

控制器中的方法:

public bool CheckValidate(string start, string time)
        {
            string datastart =  start + " " + time;
            DateTime startDate = Convert.ToDateTime(datastart);
            EventsEntities dc = new EventsEntities();
            var MatchedElements = dc.Events.Where(x => x.start <= startDate && startDate < x.end).FirstOrDefault();
            if (MatchedElements == null)
            {
                return true;
            } else
            {
                return false;
            }

        }

我想发送字符串输入并取回数据以显示可以预订该房间的消息。 我哪里搞错了?

【问题讨论】:

  • 似乎是什么错误?即:什么不起作用?它的表现如何,您希望它表现如何?
  • 这里是a shot in the dark:您可能忘记添加HttpPost 属性,这意味着您的C# 端点不接受Post 请求
  • @Stefan 我在 AJAX 调用处做了断点,似乎“onchange”不起作用,我试图在按钮上调用 AJAX 方法,效果相同。它应该检查可能性。当用户更改输入“开始时间”时,该函数被调用并且控制器检查该日期是否可以预订并返回真/假。取决于可能与否,我想显示用户消息。我通过 HTML Post 做了同样的方法,它可以工作,但我不想重新加载视图。
  • 那么,控制器的命名是否正确? ASP.NET 的默认路由会让我相信您的 CheckValidate 方法在 HomeController 内,并且您没有 API 路由的 /API 前缀,对吗?
  • @Stefan 我发现了这个错误。 "Uncaught TypeError: startdate.val is not a function"

标签: javascript c# ajax model-view-controller


【解决方案1】:

你可以这样做。

var obj = {};
    obj.startdate = document.getElementById('startdate');
    obj.starttime = document.getElementById('starttime');
    
        $.ajax({
            type: "POST",
            url: "/Home/CheckValidate",
            data: JSON.stringify(obj),
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: OnSuccess,
            failure: function (response) {
                //failure  message
            }
        });
        function OnSuccess(response) {
            //do your stuff after success response
        }
    

【讨论】:

    【解决方案2】:

    您的 ajax 调用中缺少一些内容。您需要指定要以这种方式发送的数据,以便以 JSON 格式正确发送。为此,您需要对 javascript json 对象进行字符串化,并声明您正在发送 JSON 数据类型。这是您的单击事件处理程序代码,其中包含更改:

    $(check).click(function () {
        var data = {
           start: datevalue,
           time: timevalue
        };
        $.ajax({
           type: "POST",
           url: "/Home/CheckValidate",
           data: JSON.stringify(data),
           contentType: "application/json; charset=utf-8",
           dataType: "boolean",
           success: function (response) {
              if (response) {
                 log.val = "YES";
              } else {
                 log.val = "NO";
              }
           }
        })
     });
    

    您可以在此处阅读更多信息:jquery ajax documentation

    这里还有其他现有问题已经回答了您的问题,例如this one

    【讨论】:

    • 我更新了我的帖子。我的 ajax 函数正在向控制器发送参数,但我没有得到响应,因为控制台没有记录响应。
    猜你喜欢
    • 2013-01-03
    • 2019-12-28
    • 1970-01-01
    • 2014-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-13
    相关资源
    最近更新 更多