在参数MVC 4中传递URL

时间:2012-10-11 15:23:34

标签: asp.net-mvc jquery

我有一个收集网址的网站。完整的HTTP URL输入到文本框中。在参数中传递URL时,我收到400错误。它适用于常规文本。

使用jQuery,如何在我的应用程序中传递完整的URL?

MVC路由配置:

 routes.MapRoute("UploadLinks", "media/upload_links/{link}/{albumID}",
                       new { controller = "Media", action = "WebLinkUpload" });

控制器操作:

 public ActionResult WebLinkUpload(string link, string albumID){}

jQuery AJAX调用:

$('#btnUploadWebUpload').click(function () {
        $.ajax({
            type: "GET",
            url: "/media/upload_links/" + encodeURIComponent($('#txtWebUrl').val().trim()) + "/" + currentAlbumID,
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (result) {

            }
        });
    });

2 个答案:

答案 0 :(得分:2)

网址的路径部分中不允许使用某些字符。这是nice article,其中Scott Hanselman提供了更多详细信息。我建议您将link作为查询字符串参数传递,而不是作为路径的一部分:

routes.MapRoute(
    "UploadLinks", 
    "media/upload_links/{albumID}",
    new { controller = "Media", action = "WebLinkUpload" }
);

然后:

$('#btnUploadWebUpload').click(function () {
    $.ajax({
        type: 'GET',
        url: '/media/upload_links/' + currentAlbumID,
        data: { link: $('#txtWebUrl').val().trim() },
        success: function (result) {

        }
    });
});

另请注意,我已从AJAX调用中删除contentType: 'application/json',这是错误的。您没有发送任何JSON请求。这是一个GET请求。

答案 1 :(得分:0)

确保您的地图路线呼叫在默认值之前。如果没有,它将尝试使用upload_links动作调用媒体控制器。