2016-03-07 64 views
1

我在操作鏈接中遇到了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 –

回答

2

剃刀代碼(@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 + ''+'帶斜槓'/'在這種​​情況下。 –

0

我認爲這只是關於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

我按照你的說法嘗試,但它不起作用,請檢查清楚。謝謝。 –

相關問題