数组未从Javascript传递到MVC

数组未从Javascript传递到MVC,javascript,arrays,asp.net-mvc,Javascript,Arrays,Asp.net Mvc,我正在尝试将一个数组从javascript传递回我的MVC应用程序。javascript中有一个console.log(选中),它输出一个数据数组: ["<img src="https://owlexpress.kennesaw.edu/stugifs/open.gif">", "MATH 1190/01 - Calculus I", "84528", " 4.000", "Full Term", "40", "34", "6", "0", "0", "0", "Kenn

我正在尝试将一个数组从javascript传递回我的MVC应用程序。javascript中有一个
console.log(选中)
,它输出一个数据数组:

["<img src="https://owlexpress.kennesaw.edu/stugifs/open.gif">", "MATH 1190/01 - Calculus I", "84528", "       4.000", "Full Term", "40", "34", "6", "0", "0", "0", "Kennesaw Campus", "Classroom - 100%", "Mathematics &amp; StatisticsRoom 108", "8:00 am - 9:10 amLecture", "Aug 17, 2015", "Dec 14, 2015", "Xiaohui Rebecca  Shi (P)", ""]
视图模型:

public class SelectedClassesArray
{
    public string[] arrayOfClasses { get; set; }
}
控制器操作:

//Had to set ValidateInput to false since one of the strings contains < (it errored without this)
[HttpPost, ValidateInput(false)]
    public ActionResult watchClasses(IEnumerable<SelectedClassesArray> selectedClassesArray)        
    { //Breakpoint here shows that selectedClassesArray is null
        foreach (var item in selectedClassesArray)
        {
            Console.WriteLine(item.ToString());
        }
        return View();
    }
//必须将ValidateInput设置为false,因为其中一个字符串包含<(没有此项时出错)
[HttpPost,ValidateInput(false)]
公共操作结果监视类(IEnumerable selectedClassesArray)
{//此处的断点显示selectedClassesArray为空
foreach(选定类别数组中的var项)
{
Console.WriteLine(item.ToString());
}
返回视图();
}
您是否尝试过:

$.ajax({
    type: "POST",
    url: "/ClassSearch/watchClasses",
    // I have tried setting data both ways with the same result:
    //data: { selectedClassesArray: selected },
    data: selected,
    traditional: true,
    success: function (data) { alert("SUCCESS"); }
});
或者可能是传统的序列化失败了:

$.ajax({
    type: "POST",
    url: "/ClassSearch/watchClasses",
    // I have tried setting data both ways with the same result:
    //data: { selectedClassesArray: selected },
    data: { selectedClassesArray: selected },
    traditional: false,
    success: function (data) { alert("SUCCESS"); }
});

您的操作需要一个数组列表:

watchClasses(IEnumerable<SelectedClassesArray> selectedClassesArray)  
@taxicala说的有道理,试着只传递数组,而不是传递另一个数组中的数组:

data: { selectedClassesArray: selected }

发布的属性名称必须与视图模型参数的名称匹配。

当我使用
数据:{selectedClassesArray:selected}
时,我得到了这个属性名称,当我使用
数据:selected
时,我得到了这个属性名称,所以看起来
数据:selected
工作得“更好”?使用
data:selected
让我可以看到属性
arrayOfClasses
,但它仍然是空的,如@Jrow所示,但您是否如我所说更改了操作参数?是的,它是
[HttpPost,ValidateInput(false)]公共操作结果监视类(SelectedClassesArray SelectedClassesArray SelectedClassesArray){return View();}
now@Jrow好的,我几乎可以肯定,如果您使用
watchClasses(string[]arrayOfClasses)
它会工作。我担心使用该类作为参数,您会更改一些数据以发布。@Jrow它是如何工作的,使用
watchClasses(string[]arrayOfClasses)
watchClasses(SelectedClassesArray selectedClassesArray)  
data: { selectedClassesArray: selected }