使用 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
参数中的值(并且您引用了id
、shopdoccode
等的值,但您不能剃须刀(服务器端代码)和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 动作参数的主要内容,如果未能解决你的问题,请参考以下文章
Wordpress 在从 url 获取参数的页面加载上使用 ajax