2016-11-10 21 views
0

我正在使用ASP.NET MVC。我不想在上一頁的Account_Number中搜索時,將Ajax綁定Kendo UI網格中的Account_Number列設置爲HTML鏈接。當點擊Account_Number鏈接時,它應該將Account_Number傳遞給客戶控制器方法'QuickCheckSearch'。
下面的代碼不會在視圖中填充網格,也不會調用/將值傳遞給控制器​​。有人可以糾正下面的代碼嗎?如何使用IF條件在ClientTemplate中添加超鏈接 - ASP.NET MVC的Ajax綁定Kendo UI

在此先感謝。

columns.Bound(p => p.Account_Number) 
.ClientTemplate("<#if (item.Account_Number == Model.AccountNumber){>Account_Number <# }" + "else{#><a href='" + Url.Action("QuickCheckSearch", "Customer") + "?Account_Number=#=Account_Number#'>#= Account_Number #</a> <# } #>") 
.Title("Account Number"); 

回答

0
  1. http://docs.telerik.com/kendo-ui/framework/templates/overview
  2. 你有太多的尖括號所有的地方。您應該只將它們放在模板的實際HTML標記上,而不是作爲模板語法本身的一部分。嘗試:

    .ClientTemplate(
        "# if (Account_Number ==" + @Model.AccountNumber + "){ #" + 
         "#= Account_Number #" + 
        "# }" + 
        "else { #" + 
         "<a href = '" + Url.Action("QuickCheckSearch", "Customer") + "?Account_Number=#=Account_Number#'>#= Account_Number#</a>" + 
        "# } #" 
    ) 
    

我覺得它確實有助於它格式化在單獨的行,就像你寫實際的代碼,而不是都在同一行,所以你可以直觀地看到結構。

你也可以做這種方式,這可能是更清潔:

.ClientTemplate("#= accountLinkTemplate(data) #") 
.... 
<script> 
    function accountLinkTemplate(data) { 
     var template = data.Account_Number; 
     if (data.Account_Number == " + @Model.AccountNumber + ") { 
      template = "<a href = '" + "@Url.Action("QuickCheckSearch", "Customer")" + "?Account_Number=" + data.Account_Number+ "'>" + data.Account_Number+ "</a>"; 
     } 

     return template; 
    } 
</script> 
+0

仔細檢查一切......我只是重新測試第一個在現場的項目,但我自己的ViewModel,當然,和網格正在呈現並且網址已正確形成。對於第二個,我剛剛用一個更正的模板編輯了我的答案。 –

+0

對不起回答,因爲它不允許我在評論中粘貼代碼。 我現在正在獲取網址,但在這兩種情況下Account_Number值都沒有傳遞給控制器​​方法。 – ranp

+0

由於您使用「Account_Number =」格式化網址,但您的控制器操作正在接受名爲「AccountNumber」的參數,因此您沒有獲取ID。您的服務器參數*的名稱必須與您在網址中使用的名稱相匹配。 –

相關問題