猿问

如何在没有表单的情况下将字符串数组发布到ASP.NETMVC控制器?

如何在没有表单的情况下将字符串数组发布到ASP.NETMVC控制器?

我正在创建一个小应用程序来教自己ASP.NETMVC和JQuery,其中一个页面是可以选择的项目列表。然后,我想按一个按钮,使用JQuery的POST函数,向我的控制器发送一个列表(或类似的内容),其中包含所选项目的ID。

我设法获得了一个数组,其中包含了所选元素的ID,现在我想发布它。我可以这样做的一种方法是在页面中有一个带有隐藏值的虚拟表单,然后用所选的项设置隐藏的值,并发布该表单;不过,这看起来很粗糙。

通过将数组直接发送到控制器,是否有更干净的方法来实现这一点?我尝试了一些不同的东西,但看起来控制器无法映射它正在接收的数据。以下是目前为止的代码:

function generateList(selectedValues) {
   var s = {
      values: selectedValues //selectedValues is an array of string
   };
   $.post("/Home/GenerateList", $.toJSON(s), function() { alert("back") }, "json");}

然后我的控制器看起来像这样

public ActionResult GenerateList(List<string> values){
    //do something}

我得到的只是控制器参数中的“NULL”.

有小费吗?


倚天杖
浏览 560回答 3
3回答

陪伴而非守候

我修改了我的响应以包括我所做的测试应用程序的代码。更新:我更新了jQuery,将“传统”设置为true,这样它将再次工作(per@dustinDavis‘答案)。首先,javascript:function&nbsp;test(){ &nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;stringArray&nbsp;=&nbsp;new&nbsp;Array(); &nbsp;&nbsp;&nbsp;&nbsp;stringArray[0]&nbsp;=&nbsp;"item1"; &nbsp;&nbsp;&nbsp;&nbsp;stringArray[1]&nbsp;=&nbsp;"item2"; &nbsp;&nbsp;&nbsp;&nbsp;stringArray[2]&nbsp;=&nbsp;"item3"; &nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;postData&nbsp;=&nbsp;{&nbsp;values:&nbsp;stringArray&nbsp;}; &nbsp;&nbsp;&nbsp;&nbsp;$.ajax({ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;type:&nbsp;"POST", &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;url:&nbsp;"/Home/SaveList", &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data:&nbsp;postData, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;success:&nbsp;function(data){ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(data.Result); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dataType:&nbsp;"json", &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;traditional:&nbsp;true &nbsp;&nbsp;&nbsp;&nbsp;});}下面是我的控制器类中的代码:public&nbsp;JsonResult&nbsp;SaveList(List<String>&nbsp;values){ &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;Json(new&nbsp;{&nbsp;Result&nbsp;=&nbsp;String.Format("Fist&nbsp;item&nbsp;in&nbsp;list:&nbsp;'{0}'",&nbsp;values[0])&nbsp;});}当我调用javascript函数时,我会收到一个警告,上面写着“列表中的第一项:‘item 1’”。希望这能帮上忙!

慕容708150

不要将数据作为数组发布。若要绑定到列表,应为每个键提交具有相同值的键/值对。您不应该需要一个表单来完成这个任务。您只需要一个键/值对的列表,您可以在对$.post的调用中包含它。
随时随地看视频慕课网APP
我要回答