如何格式化动作link在mvc中传递参数?
How to format action link pass parameter in mvc?
我在将操作 link 作为 mvc 中的文本时遇到问题。
function ListProduct() {
$.get('@Url.Action("ListProduct", "Product")')
.done(function (data) {
var json = JSON.parse(data.result);
$.each(json, function (idx, obj) {
$("#tb_product tbody").append(
'<tr>' +
' <td>' + obj.CATEGORY_NAME + '</td>' +
' <td><a href="@Url.Action("Detail", "Product", new { id = '+ obj.PRODUCT_ID + ' })">' + obj.PRODUCT_NAME + '</a></td>' +' </tr>');
});
});
}
但它似乎不起作用,它在 '+ obj.PRODUCT_ID + '
处收到错误 too many charaters in character literal
。
谢谢看到了
我认为这只是"level confusion"关于mvc生成什么和javascript生成什么。 Mvc 不使用字符串连接来构造它的辅助方法调用。在本例中,它使用 @Url.Action
的左括号和右括号从周围的文本中解析出方法调用。在中间粘贴字符串连接会使 mvc 代码解析失败。
您收到的错误来自 mvc,因为它试图处理 @Url.Action
但失败了,因为它不希望在调用它的过程中进行字符串连接。
在我的修复中,看到
@Url.Action("Detail", "Product", new { id = obj.PRODUCT_ID })
是纯c#代码。它纯粹且仅由服务器处理,而不是由 javascript.
我不知道您如何提供此代码,但您不能只提供来自 mvc 项目的 javascript 文件并期望它能正常工作。它必须从 returns 视图的控制器方法提供。该视图可以包含此代码。但是,如果您的客户端页面通过脚本 url 引用它并且它只是下载它,即使脚本与所有控制器内容位于同一网站上,mvc 服务器方法也不会工作。
$("#tb_product tbody").append(
"<tr>" +
" <td><a href='@Url.Action("Detail", "Product", new { id = obj.PRODUCT_ID })'> @obj.PRODUCT_NAME </a></td>" +
" </tr>");
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
Razor 代码 (@Url.Action(...)
) 在 服务器端运行 ,而 JavaScript 在客户端运行,在服务器完成它的工作很久之后,回复了一个回复,然后继续做其他事情。因此,您不能将 JavaScript 变量传递给 Razor 方法,因为 JavaScript 变量甚至还不存在。
如果您需要将该值作为实际 URL 路径的一部分,那么您或许可以手动构建路径。例如:
'<a href="@Url.Action("Detail", "Product")'+ obj.PRODUCT_ID + '">' + obj.PRODUCT_NAME + '</a>'
换句话说,服务器端 @Url.Action("Detail", "Product")
被评估为 returns 类似 /product/detail/
的东西。然后,在客户端,在你的 JavaScript 中,你所做的只是将产品 ID 连接到这个现有的字符串上,从而产生类似 /product/detail/xxxxxx
.
的结果
我在将操作 link 作为 mvc 中的文本时遇到问题。
function ListProduct() {
$.get('@Url.Action("ListProduct", "Product")')
.done(function (data) {
var json = JSON.parse(data.result);
$.each(json, function (idx, obj) {
$("#tb_product tbody").append(
'<tr>' +
' <td>' + obj.CATEGORY_NAME + '</td>' +
' <td><a href="@Url.Action("Detail", "Product", new { id = '+ obj.PRODUCT_ID + ' })">' + obj.PRODUCT_NAME + '</a></td>' +' </tr>');
});
});
}
但它似乎不起作用,它在 '+ obj.PRODUCT_ID + '
处收到错误 too many charaters in character literal
。
谢谢看到了
我认为这只是"level confusion"关于mvc生成什么和javascript生成什么。 Mvc 不使用字符串连接来构造它的辅助方法调用。在本例中,它使用 @Url.Action
的左括号和右括号从周围的文本中解析出方法调用。在中间粘贴字符串连接会使 mvc 代码解析失败。
您收到的错误来自 mvc,因为它试图处理 @Url.Action
但失败了,因为它不希望在调用它的过程中进行字符串连接。
在我的修复中,看到
@Url.Action("Detail", "Product", new { id = obj.PRODUCT_ID })
是纯c#代码。它纯粹且仅由服务器处理,而不是由 javascript.
我不知道您如何提供此代码,但您不能只提供来自 mvc 项目的 javascript 文件并期望它能正常工作。它必须从 returns 视图的控制器方法提供。该视图可以包含此代码。但是,如果您的客户端页面通过脚本 url 引用它并且它只是下载它,即使脚本与所有控制器内容位于同一网站上,mvc 服务器方法也不会工作。
$("#tb_product tbody").append(
"<tr>" +
" <td><a href='@Url.Action("Detail", "Product", new { id = obj.PRODUCT_ID })'> @obj.PRODUCT_NAME </a></td>" +
" </tr>");
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
Razor 代码 (@Url.Action(...)
) 在 服务器端运行 ,而 JavaScript 在客户端运行,在服务器完成它的工作很久之后,回复了一个回复,然后继续做其他事情。因此,您不能将 JavaScript 变量传递给 Razor 方法,因为 JavaScript 变量甚至还不存在。
如果您需要将该值作为实际 URL 路径的一部分,那么您或许可以手动构建路径。例如:
'<a href="@Url.Action("Detail", "Product")'+ obj.PRODUCT_ID + '">' + obj.PRODUCT_NAME + '</a>'
换句话说,服务器端 @Url.Action("Detail", "Product")
被评估为 returns 类似 /product/detail/
的东西。然后,在客户端,在你的 JavaScript 中,你所做的只是将产品 ID 连接到这个现有的字符串上,从而产生类似 /product/detail/xxxxxx
.