【问题标题】:How to receive data from ajax send() method in a controller如何从控制器中的 ajax send() 方法接收数据
【发布时间】:2014-05-03 14:51:08
【问题描述】:

我正在尝试在 ajax POST 发送的 ASP.NET MVC 控制器中提供数据。在客户端,我使用传统的 XMLHttpRequest 对象和 send() 方法而不是 jQuery.ajax()。

你知道如何从控制器中的 send() 获取变量吗?在文档http://www.xul.fr/XMLHttpRequest-object.html 中,我读到它必须是字符串。

我的客户端:

    var data1 = "some string";
    var data2 = "other string";

    var xhr = new XMLHttpRequest();
    xhr.open("POST", "https://localhost:44301/Home/SaveDataInDB", true);
    xhr.send(data1, data2);
    xhr.onreadystatechange = saved;

我的服务器端:

[HttpPost]
    public JsonResult SaveDataInDB(string data1, string data2) 
    {
        var dbobj = new DbObj
        {                
            field1 = data1,
            field2 = data2
        };

        if (User.Identity.IsAuthenticated)
        {
            dbobj.user = User.Identity.Name;
        }
        else 
        {
            dbobj.user = "anonymous";
        }


        db.DbObj.Add(dbobj);
        db.SaveChanges();

        return Json(true);
    }

【问题讨论】:

    标签: ajax asp.net-mvc


    【解决方案1】:

    你可以这样做,假设这是你的 xmlHttpRequest -

    <script type="text/javascript">
        var request = new XMLHttpRequest();
        var o = new Object();
        o.data1 = "Rami";
        o.data2 = "Ramilu";
    
        request.open('POST', '/Home/xhr', true);
        request.setRequestHeader('Content-Type', 'application/json; charset=utf-8');
        request.setRequestHeader('Content-Length', JSON.stringify(o).length);
        request.onreadystatechange = function () {
            if (request.readyState == 4 && request.status == 200) {
                alert(request.responseText);
            }
        }
        request.send(JSON.stringify(o));
    </script>
    

    在服务器端,以这种方式定义 ViewModel -

    public class XhrViewModel
    {
        public string data1 { get; set; }
        public string data2 { get; set; }
    }
    

    然后是您想要获取此数据的控制器操作 -

        public ActionResult xhr(XhrViewModel model)
        {
            return Content("success", "text/plain");
        }
    

    输出将是 -

    【讨论】:

    • 不,我不是这个意思。我想在控制器中使用 data1 和 data2 变量。如何正确通过?
    • @magos,我更新了我的完整答案。请检查一下。
    • 嗯...它似乎应该工作,但我仍然有一个问题。在控制器中,我像您一样插入了断点,并且在我的应用程序模型/data1 和 data2 中为空。可能是什么原因?让我了解客户端脚本中的数据在何时何地传递给 ViewModel?因为从 XhrViewModel 派生在控制器中......你想再次看到我的实现吗?
    • 好的,很抱歉 - 我应用了除 ViewModel 之外的其他 o-object 名称。 :) 你的回答很棒。谢谢!
    猜你喜欢
    • 2016-10-17
    • 1970-01-01
    • 2018-12-16
    • 2017-01-20
    • 1970-01-01
    • 1970-01-01
    • 2018-03-24
    • 1970-01-01
    • 2014-05-16
    相关资源
    最近更新 更多