如何从控制器中的ajax send()方法接收数据

时间:2014-05-03 14:51:09

标签: ajax asp.net-mvc

我正在尝试提供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);
    }

1 个答案:

答案 0 :(得分: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");
    }

输出将是 -

enter image description here