使用 Ajax 的 URL 动作参数

Posted

技术标签:

【中文标题】使用 Ajax 的 URL 动作参数【英文标题】:Url action parameters using Ajax 【发布时间】:2017-09-07 10:47:12 【问题描述】:

我正在尝试使用参数将数据从视图传递到控制器。 现在我遇到了一些困难。一旦我从表中选择一行并按下具有 onclick 方法的按钮,我就会尝试传递这些参数 ShowTasks()

C# 控制器:

     [Route("/service/delivery/id/shopdoccode/regdate")]
     public ActionResult Delivery(string id, string shopdoccode, string regdate)
     
        //do stuf
     

用户点击按钮时的javascript函数:

function ShowTasks() 
    //Dear *** > This works, this is for selecting a row in the table
    var $selectedRow = $(".highlight");
    if ($selectedRow.length == 1) 
        var dcColumn = 0;
        var rdColumn = 1;
        var shopdoccodeColumn = 3;

        //assigning name to the colomn value 
        var id = $selectedRow[0].children[dcColumn].innerText.trim();
        var regdate = $selectedRow[0].children[rdColumn].innerText.trim();
        var shopdoccode = $selectedRow[0].children[shopdoccodeColumn].innerText.trim();

        //ajax 
        if (id && regdate && shopdoccode) 
            $.ajax(
                type: 'POST',
                url: '@Url.Action("service", "delivery" ,new  id = "id", shopdoccode = "shopdoccode", regdate = "regdate" )',
                data:  id, regdate, shopdoccode ,
                success: function (data) 
                    if (data.success) 
                        console.log("Succes");
                    

                ,
                error: function (data) 
                    console.log("Error");
                
            );
        
    

到目前为止我做了什么?坐了几个小时试图找到一种方法将参数提供给我的控制器,以便我可以调用 SQL 存储过程。 不幸的是,我不能简单地为此使用隐藏表单。

这也很有帮助: Url.Action parameters?

@sleeyuen

【问题讨论】:

只是url: '@Url.Action("service", "delivery")', - 您已经发送了data 参数中的值(并且您引用了idshopdoccode 等的值,但您不能剃须刀(服务器端代码)和javascript变量(客户端代码)无论如何) 并根据您的错误消息 - 您的脚本位于单独的文件中 - 剃刀代码未在外部文件中解析。 【参考方案1】:

在我看来,您的 Url.Action 的参数顺序错误。将其更改为:

url: '@Url.Action("delivery", "service", new  id = "id", shopdoccode = "shopdoccode", regdate = "regdate" )',

这是您想要的适当重载:

Action(String, String, Object) 依次包含 actionName、controllerName 和 routeValues。

【讨论】:

谢谢,但是当我运行应用程序并检查按下按钮时会发生什么:jquery-1.12.4.js:10254 POST localhost:63061/……0shopdoccode%20=%20%22shopdoccode%22 ,%20regdate%20=%20%22regdate%22%20%7D) 404(未找到) 或许贴一张截图,因为这没有多大意义。 完成 ;) 当我检查浏览器并单击按钮时会发生这种情况 剃须刀文件中有这个javascript吗?还是在 .js 文件中?我猜是后者,因为它不知道为什么 @Url.Action 仍然是生成的 url 的一部分。【参考方案2】:

您不能将 *.js 或 *.html 文件写入剃须刀代码。

@Url.Action(string actionName,string controllerName,object routeValues)

以上代码只能使用*.cshtml文件。

【讨论】:

当我把它放在我的 cshtml 中时,我收到来自 new id = "id", shopdoccode = "shopdoccode", regdate = "regdate" )' 的错误,参数 3:cannot convert from ' 因为你已经在ajax里面提交了参数,所以不需要在Action中设置objectValue 类似@Url.Action("ArticleDetail", "Article", new id = item.ID ),这里的item.ID不是来自js。【参考方案3】:

使用 Url.RouteUrl 而不是 Url.Action 进行测试

【讨论】:

以上是关于使用 Ajax 的 URL 动作参数的主要内容,如果未能解决你的问题,请参考以下文章

Django - AJAX - 为啥我需要 url 参数?

ajax请求Url加参数的使用方法

Wordpress 在从 url 获取参数的页面加载上使用 ajax

在 ajax 调用中使用 datatable url 属性将参数传递给服务器

Ajax通过url发送参数

jquery中$.ajax()方法使用详解(大部分转的)