2014-07-02 39 views
1

我正在使用Razor MVC .NET進行開發。我在我的數據是回來了很好的,即一個實體框架,我有這樣的設置,例如:在href中添加一個鏈接到Kendo UI gridview中每個項目ID的項目

型號:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 

namespace MyProject.Web.Models 
{ 
    public class Training 
    { 
     public int Id {get; set;} 
     public string Name {get; set;} 
     public string editLink {get; set;} 
    } 
} 

控制器:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.Mvc; 
using System.Data.Entity; 
using MyProject.Entities; 
using MyProject.Data; 
using Kendo.Mvc.UI; 
using Kendo.Mvc.Extensions; 
using MyProject.Web.Models; 

namespace MyProject.Web.Controllers 
{ 
    public class TrainingController : Controller 
    { 
     [HttpGet] 
     public ActionResult Index() 
     { 
      return View(); 
     } 

     [AcceptVerbs(HttpVerbs.Post)] 
     public ActionResult Read([DataSourceRequest] DataSourceRequest request) 
     { 
      using (var db = new MyDb(false)) 
      { 
       var data = db.Training.Select(d => new TrainingModel 
       { 
        Id = d.Id, 
        Name = d.Name 
        // I want to do this, here: 
        // editLink = "<a href=Training.cshtml?mode=edit&Id=" + d.Id + " target=_blank>Edit Training</a>"; 
       }).ToDataSourceResult(request); 
       return Json(data, JsonRequestBehavior.AllowGet); 
      } 
     } 
    } 
} 

視圖ISN」重要的 - 一個標準的基於Kendo UI的gridview,它調用上面的「Read」例程。我也修改了一些代碼,只是爲了給我一個基本的想法。

我想要做的是將超鏈接與每個ID連接起來,並顯示在每個項目的gridview列中,這樣用戶可以點擊該鏈接,然後轉到另一個頁面,在那裏他們可以編輯它們項目。我不能這樣做,因爲「Id」是數據庫中的一個int,我需要在一個字符串或一個對象中使用HTML嗎?無論哪種方式,它們不會混合使用它們現在使用的格式,而LINQ似乎也不會讓您即時改變它。

  • 我試過SqlFunctions.ConvertString,它甚至不認爲SqlFunctions作爲一種類型。
  • 我會使用內置的編輯功能,但是其他數據庫表中的數據需要在ID的其他頁面上顯示,而Kendo控件只允許您一次關注一張表。

所以,簡而言之,如何使用此Select語句將鏈接插入到gridview列中,或者我可以嗎?還是有另一種方式來編輯Json數據之前,它返回?或者人們完全以其他方式完成它?

回答

2

我會將URL作爲字符串發送,例如Url.Action(),然後在客戶端使用在網格列上使用帶有錨點的Column.ClientTemplate()。如果你正在使用Mvc包裝的網格,這將工作。

[AcceptVerbs(HttpVerbs.Post)] 
    public ActionResult Read([DataSourceRequest] DataSourceRequest request) 
    { 
     using (var db = new MyDb(false)) 
     { 
      var data = db.Training.Select(d => new TrainingModel 
      { 
       Id = d.Id, 
       Name = d.Name 
       // I want to do this, here: 
       editLink = "Training.cshtml?mode=edit&Id=" + d.Id.ToString(); 
      }).ToDataSourceResult(request); 
      return Json(data, JsonRequestBehavior.AllowGet); 
     } 
    } 

網格配置:

@(Html.Kendo().Grid<MyClass.MyCollection>() 
    .Name("myGrid")   
    .Columns(columns => 
    { 
     columns.Bound(t => t.editLink).Title("Action").ClientTemplate("<a href='${editLink}' target=_blank>Edit Training</a>"); 
    //OR  
     columns.Bound(t => t.id).Title("Action").ClientTemplate("<a href='Training.cshtml?mode=edit&Id=${id}' target=_blank>Edit Training</a>"); 


    }) 
    .... 
) 
+0

謝謝,但'd.Id.ToString()'不工作。 「LINQ to Entities不識別方法'System.String ToString()'的方法,並且這個方法不能被轉換成存儲表達式」是錯誤。 Linq不允許.ToString()。 – vapcguy

+1

你的第二部分,網格配置雖然工作!你是對的,我可以在第二列中使用id .Bound語句。我剛剛添加了'columns.Bound(p => p.Id).Title(「Action」)。ClientTemplate(「Edit Training」);'它工作完美!謝謝! – vapcguy

相關問題