如何在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。 谢谢你看到它。

+0

请附上更多您的服务器端代码(代码左右,上面和下面)这个代码,所以我们可以看到这行代码的上下文。我们假设你的mvc代码块是正确定义的,但我们需要检查它。 – toddmo

+0

是的,我更新我的代码片段,在这种情况下,显示'CATEGORY_NAME'和'PRODUCT_NAME',这里的问题,格式动作链接在视图中razor mvc4 –

剃刀代码(@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的内容。

+0

他的剃须刀代码甚至没有运行。这个对@ @ Url.Action的调用按照原样直接传递给客户端。我已经要求他提供他的控制器和全视图代码。我不确定他是否知道那是什么或者是否存在。我认为他把它当作另一个js文件来对待。 – toddmo

+0

那么,正如@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>

+0

它仍然无法正常工作。 –

+0

我更新了我的代码。 –

+0

我按照你的说法尝试,但它不起作用,请检查清楚。谢谢。 –