Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将带有AJAX的JavaScript数组发布到asp.net MVC控制器_Javascript_Ajax_Asp.net Mvc_Jquery - Fatal编程技术网

将带有AJAX的JavaScript数组发布到asp.net MVC控制器

将带有AJAX的JavaScript数组发布到asp.net MVC控制器,javascript,ajax,asp.net-mvc,jquery,Javascript,Ajax,Asp.net Mvc,Jquery,我的控制器: [HttpPost] public ActionResult AddUsers(int projectId, int[] useraccountIds) { ... } 我想通过AJAX将参数发布到控制器。传递int projectId不是问题,但是我无法发布int[] 我的JavaScript代码: function sendForm(projectId, target) { $.ajax({ traditional: true,

我的控制器:

[HttpPost]
public ActionResult AddUsers(int projectId, int[] useraccountIds)
{
    ...
}
我想通过AJAX将参数发布到控制器。传递
int projectId
不是问题,但是我无法发布
int[]

我的JavaScript代码:

function sendForm(projectId, target) {
    $.ajax({
        traditional: true,
        url: target,
        type: "POST",
        data: { projectId: projectId, useraccountIds: new Array(1, 2, 3) },
        success: ajaxOnSuccess,
        error: function (jqXHR, exception) {
            alert('Error message.');
        }
    });
}
我用测试阵列进行了尝试,但没有成功( 我还尝试设置
traditional:true
,或
contentType:'application/json;charset=utf-8'
,但也没有成功


发布到我的控制器的
int[]useraccountIds
始终为空。

您可以定义一个视图模型:

public class AddUserViewModel
{
    public int ProjectId { get; set; }
    public int[] userAccountIds { get; set; }
}
然后调整控制器操作以将此视图模型作为参数:

[HttpPost]
public ActionResult AddUsers(AddUserViewModel model)
{
    ...
}
最后调用它:

function sendForm(projectId, target) {
    $.ajax({
        url: target,
        type: 'POST',
        contentType: 'application/json',
        data: JSON.stringify({ 
            projectId: projectId, 
            userAccountIds: [1, 2, 3] 
        }),
        success: ajaxOnSuccess,
        error: function (jqXHR, exception) {
            alert('Error message.');
        }
    });
}

如果要将数组传递给mvc引擎,请多次发送输入。请将代码更改为以下内容:

function sendForm(projectId, target) {
var useraccountIds = new Array(1, 2, 3);
var data = { projectId: projectId };
for (var i = 0; i < useraccountIds.length; i++) {
  $.extend(true, data, {useraccountIds: useraccountIds[i]});
}
$.ajax({
    traditional: true,
    url: target,
    type: "POST",
    data: data,
    success: ajaxOnSuccess,
    error: function (jqXHR, exception) {
        alert('Error message.');
    }
});
函数sendForm(projectId,target){
var useraccountIds=新数组(1,2,3);
var data={projectId:projectId};
对于(var i=0;i
}

将serializable属性放在类上。然后,它将尝试将您传递给C#类的javascript对象转换

在JS中:

{
   ProjectId = 0, 
   userAccountIds = []
}

// C#
[Serializable] 
public class AddUserViewModel
{
    public int ProjectId { get; set; }
    public int[] userAccountIds { get; set; }
}
使用$.Ajax(),您可以轻松地将数据从javascript获取到MVC中的控制器

就像

var uname = 'John Doe';

$.ajax({

        url: "/Main/getRequestID",  // This is path of your Controller with Action Result.
        dataType: "json",           // Data Type for sending the data

        data: {                     // Data that will be passed to Controller
            'my_name': uname,     // assign data like key-value pair       
             // 'my_name'  like fields in quote is same with parameter in action Result
        },

        type: "POST",               // Type of Request
        contentType: "application/json; charset=utf-8", //Optional to specify Content Type.

        success: function (data) { // This function is executed when this request is succeed.
                alert(data);
        },

        error: function (data) {
                alert("Error");   // This function is executed when error occurred.
        }
)};
然后,在控制器端

public ActionResult getRequestID(String my_name)
{

    MYDBModel myTable = new Models.MYDBModel();
    myTable.FBUserName = my_name;
    db.MYDBModel.Add(myTable);
    db.SaveChanges();              // db object of our DbContext.cs
    //return RedirectToAction(“Index”);   // After that you can redirect to some pages…
    return Json(true, JsonRequestBehavior.AllowGet);    // Or you can get that data back after inserting into database.. This json displays all the details to our view as well.
}
参考资料。 在JS中:

var myArray = new Array();
myArray.push(2);
myArray.push(3);
$.ajax({
            type: "POST",
            url: '/MyController/MyAction',
            data: { 'myArray': myArray.join() },
            success: refreshPage
        });
在MVC/C中:


除非您指定ajax请求(Post/Get)具有该属性,否则它将无法工作
traditional
设置为true。
有关更多详细信息,请参阅此处。

请发布错误消息。我已调试控制器方法,int[]useraccounts始终为空。始终最好查看发送的实际数据。获取Fiddler,或查看网络下的开发工具(即Firefox/Firebug的Chrome).根据firebug中的网络监视器,AJAX只发送表单中的数据,而不是我指定的数据…是的,我找到了解决方案并编辑了我的答案。但是我的代码没有经过测试,但这就是解决方案。即使是硬编码的projectId(如23)也不会发送到控制器。而是真正的表单数据(还有一个项目id)已发送:(那边的
sendForm
函数,您在哪里调用它?它是在某个表单的提交事件中还是在某个提交按钮的单击事件中?您是否确保通过返回false来取消此事件的默认操作?我想您没有。嗨,我是否可以将javascript对象发送到asp.net并获取该类objApiController中的ect?是的,一个具有Serializable属性的普通类就足够了。感谢Josh更新我。我已经更新了链接。请检查。实际上我已经将我的博客从Wordpress移动到blogger。因此,该链接已断开。现在它正在工作。。
public PartialViewResult MyAction(string myArray)
{
   var myArrayInt = myArray.Split(',').Select(x=>Int32.Parse(x)).ToArray();
   //My Action Code Here
}