如何在mvc中设置动作链接传递参数的格式?
我在操作链接中遇到了mvc中的文本问题。如何在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
。 谢谢你看到它。
剃刀代码(@Url.Action(...)
)运行服务器端,而JavaScript的运行客户端,不久之后服务器已经做了它的工作,返回响应,并转移到其他事情。因此,您无法将JavaScript变量传递给Razor方法,因为JavaScript变量甚至不存在。
如果您需要将该值作为实际URL路径的一部分,那么您可以手动构建路径。例如:
'<a href="@Url.Action("Detail", "Product")'+ obj.PRODUCT_ID + '">' + obj.PRODUCT_NAME + '</a>'
换句话说,服务器端,@Url.Action("Detail", "Product")
被评估的返回类似/product/detail/
。然后,在客户端,在您的JavaScript中,您所做的只是将产品ID连接到此现有字符串上,产生类似于/product/detail/xxxxxx
的内容。
他的剃须刀代码甚至没有运行。这个对@ @ Url.Action的调用按照原样直接传递给客户端。我已经要求他提供他的控制器和全视图代码。我不确定他是否知道那是什么或者是否存在。我认为他把它当作另一个js文件来对待。 – toddmo
那么,正如@Chris Pratt所说,在客户端,我想要返回链接为'/ product/detail/xxxx',这就是为什么我需要javascript格式的url.action。我认为它就像'' + obj.PRODUCT_NAME + ''+'带斜杠'/'在这种情况下。 –
我认为这只是关于mvc生成的内容和javascript生成内容的“级别混淆”。 Mvc不使用字符串连接来构造它的辅助方法调用。在这种情况下,它使用打开和关闭的括号@Url.Action
解析出周围文本的方法调用。在中间粘贴字符串连接会导致mvc代码解析失败。
你得到的错误是从mvc,因为它试图处理@Url.Action
并失败,因为它不期望在调用它的中间字符串连接。
在我这里修复,看到
@Url.Action("Detail", "Product", new { id = obj.PRODUCT_ID })
是纯C#代码。它纯粹只由服务器处理,而不是由JavaScript处理。
我不知道你是如何提供这段代码,但你不能只是从一个MVC项目提供的JavaScript文件,并期望它的工作。它必须从返回视图的控制器方法中提供。该视图可以包含此代码。但是,如果你的客户端页面通过脚本url引用它,并且它只是下载它,即使脚本与所有控制器的东西在同一个Web站点上,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>
它仍然无法正常工作。 –
我更新了我的代码。 –
我按照你的说法尝试,但它不起作用,请检查清楚。谢谢。 –
请附上更多您的服务器端代码(代码左右,上面和下面)这个代码,所以我们可以看到这行代码的上下文。我们假设你的mvc代码块是正确定义的,但我们需要检查它。 – toddmo
是的,我更新我的代码片段,在这种情况下,显示'CATEGORY_NAME'和'PRODUCT_NAME',这里的问题,格式动作链接在视图中razor mvc4 –