Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.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
C# 如何在ASP.NETMVC中使用JQuery.Ajax传递多个参数_C#_Asp.net Mvc_Asp.net Mvc 2_Jquery - Fatal编程技术网

C# 如何在ASP.NETMVC中使用JQuery.Ajax传递多个参数

C# 如何在ASP.NETMVC中使用JQuery.Ajax传递多个参数,c#,asp.net-mvc,asp.net-mvc-2,jquery,C#,Asp.net Mvc,Asp.net Mvc 2,Jquery,大家好,我是JSon新手,不太确定如何传递数据。我使用ASP.NETMVC作为我的开发平台 他认为: 在Global.asax中: 因为我只在$.ajaxURL中传递了一个参数'photocegory',所以一切都可以这样工作。我现在的目标是传递第二个参数,即userID,因此我可以在下面的控制器方法中使用这两个参数 在控制器中: 有人知道如何编写$.ajax方法,以便我可以将这两个参数传递给控制器吗?谢谢 取决于你想如何通过考试。您正在执行GET,但您的路由不支持用户ID作为路由参数,因此您可

大家好,我是JSon新手,不太确定如何传递数据。我使用ASP.NETMVC作为我的开发平台

他认为:

在Global.asax中:

因为我只在$.ajaxURL中传递了一个参数'photocegory',所以一切都可以这样工作。我现在的目标是传递第二个参数,即userID,因此我可以在下面的控制器方法中使用这两个参数

在控制器中:


有人知道如何编写$.ajax方法,以便我可以将这两个参数传递给控制器吗?谢谢

取决于你想如何通过考试。您正在执行GET,但您的路由不支持用户ID作为路由参数,因此您可以在查询字符串中传递它。URL应该是/FindPhotos/lolcats?UserId=123

也就是说,您是想让此人选择用户,还是要使用当前登录用户的用户id。如果是后者,我认为你只要从控制器那里拿到它,保持路线干净就行了

本着保持路线整洁的精神,我实际上会将路线更改为如下所示:

routes.MapRoute( 
       "FindPhotos", 
       "FindPhotos/{category}/{userId}", 
        new { controller = "Clinical", action = "FindPhotosByCategory", category = "", userId=UrlParameter.Optional } 
       ); 
这将使您可以选择将userId设置为可选,然后根据是否提供它进行过滤。然后,您的ajax调用变成:

   $.ajax({ 
        type: "GET", 
        contentType: "application/json; charset=utf-8", 
        url: "/FindPhotos/" + photoCategory + "/" + userId , 
        data: "{}", 
        dataType: "json", 
最后,它与JSON无关,而与如何调用URL有关。同样,这是GET,因此您可以将其传递到URL上,然后就可以了


另一方面——我相信您也知道——出于安全考虑,我会尽量避免将实际用户ID放入标记或其他任何地方。如果必须这样做,请确保在代码的业务逻辑/数据访问部分以某种方式保护访问。

我认为问题在于,您试图在控制方法类别UserId中传递2个参数,但在路由中,您只接受1,即类别

或者将您的路线更改为

routes.MapRoute(
       "FindPhotos",
       "FindPhotos/{category}/{userId}",
        new { controller = "Clinical", action = "FindPhotosByCategory", category = "", userId="" }
       );
或者将控制方法更改为

public JsonResult FindPhotosByCategory(string category) {
//pass your userid from code behinde
....
}

您可以在$.ajax这样的数据参数中发送任意数量的数据

$.ajax({
type: "GET", 
        contentType: "application/json; charset=utf-8", 
        url: "/FindPhotos/" + photoCategory, 
        data: {UserID = "34", UserName = "George", Key = "Value"}, 
        dataType: "json"

});

所有这些值都将附加到查询字符串中,而不是作为路由值。如果你想要路由值,那么是的,你必须为此编写一个匹配的路由。

您好,非常感谢您的帮助。我同意你关于在URL中使用用户ID的安全性。是否有办法使用global.asax中的路由表屏蔽用户id?或者有更好的方法隐藏它吗?它是当前登录用户的Id吗?
routes.MapRoute(
       "FindPhotos",
       "FindPhotos/{category}/{userId}",
        new { controller = "Clinical", action = "FindPhotosByCategory", category = "", userId="" }
       );
public JsonResult FindPhotosByCategory(string category) {
//pass your userid from code behinde
....
}
$.ajax({
type: "GET", 
        contentType: "application/json; charset=utf-8", 
        url: "/FindPhotos/" + photoCategory, 
        data: {UserID = "34", UserName = "George", Key = "Value"}, 
        dataType: "json"

});