Vb.net Can';t通过ajax在URL中传递多个匿名参数

Vb.net Can';t通过ajax在URL中传递多个匿名参数,vb.net,asp.net-mvc-3,jquery,Vb.net,Asp.net Mvc 3,Jquery,我试图在ajax调用中使用数据通过路由值发送一些ID,但在传递多个ID时遇到问题 这就是我现在要做的。。。然后在服务器上将其拆分为一个数组 @Url.Action("Save", "MyController", New With {.Ids = ViewData("Id1") & "," & ViewData("Id2") & "," & ViewData("Id3") & "," & ViewData("Id4")})"); 这就是我想做的

我试图在ajax调用中使用数据通过路由值发送一些ID,但在传递多个ID时遇到问题

这就是我现在要做的。。。然后在服务器上将其拆分为一个数组

@Url.Action("Save", "MyController", New With {.Ids = ViewData("Id1") & "," &   ViewData("Id2") & "," & ViewData("Id3") & "," & ViewData("Id4")})");
这就是我想做的:

var url = "@Url.Action("Save", "MyController", New With {.Id1 = ViewData("Id1"), .Id2 = ViewData("Id2"), .Id3 = ViewData("Id3")})";

$.ajax({            
    type: "POST",            
    dataType: "json",            
    url: urlString,
    data: json,                     
    success: function(data) {                                  

}

});
控制器方法签名:

<HttpPost()> _
    Function Save(ByVal json As String, ByVal Id1 As String, ByVal Id2 As String, ByVal Id3 As String) As JsonResult
参数值:Id1为整数,Id2为guid,Id3为整数

不幸的是,当我尝试这一点,我只会得到我的第一个参数,其余的什么都没有

任何建议都将不胜感激


谢谢

您可以发送JSON请求:

var url = '@Url.Action("Create", "FormGeneration")';

var jsonData = @Html.Raw(Json.Encode(New With { .Id1 = ViewData("Id1"), .Id2 = ViewData("Id2"), .Id3 = ViewData("Id3") }));
// assign some other properties
jsonData.foo = 'bar';

$.ajax({            
    url: url,
    type: 'POST',
    contentType: 'application/json',
    data: JSON.stringify(jsonData),
    success: function(data) {                                  

    }
});
这将成功调用并将参数传递给以下操作:

<HttpPost()>
Public Function Create(ByVal id1 As Integer, ByVal id2 As Integer, ByVal id3 As Integer, ByVal foo As SomeViewModel) As ActionResult
    ...
End Function
<HttpPost()>
Public Function Create(ByVal ids As Integer(), ByVal foo As SomeViewModel) As ActionResult
    ...
End Function
将绑定到以下操作:

<HttpPost()>
Public Function Create(ByVal id1 As Integer, ByVal id2 As Integer, ByVal id3 As Integer, ByVal foo As SomeViewModel) As ActionResult
    ...
End Function
<HttpPost()>
Public Function Create(ByVal ids As Integer(), ByVal foo As SomeViewModel) As ActionResult
    ...
End Function

公共函数Create(ByVal id为Integer(),ByVal foo为SomeViewModel)作为ActionResult
...
端函数
但是,如果您已经有一个视图模型(顺便说一句,您应该这样做),则ID可以直接成为视图模型的属性,因此控制器操作现在看起来如下所示:

<HttpPost()>
Public Function Create(ByVal foo As SomeViewModel) As ActionResult
    ...
End Function

公共函数Create(ByVal foo作为SomeViewModel)作为ActionResult
...
端函数

感谢您的回复!这些都是很好的选择,但我想知道为什么我首选的解决方案不起作用?@Hidan,我完全不知道。您尚未显示试图调用的控制器操作的签名。你怎么能指望我知道为什么你的代码在没有实际显示代码的情况下不能工作?我很抱歉,我没有意识到我没有包括它。。。我已经更新了原来的帖子@Hidan,好的,现在您已经显示了服务器端代码,您必须显示您在
$中使用的
urlString
json
变量的值。我所能看到的只是一些
url
变量,您似乎没有在任何地方使用它。我正在处理的Json数据以及传入的第一个参数。如果我重新排列参数的顺序,使guid是第一个或其他整数,我也会得到它们,而不是后面的两个。。。
<HttpPost()>
Public Function Create(ByVal foo As SomeViewModel) As ActionResult
    ...
End Function