为项目ID为href的每个项目添加Kendo UI gridview的链接

时间:2014-07-02 01:35:26

标签: linq gridview kendo-ui kendo-grid kendo-asp.net-mvc

我在Razor MVC .NET中开发。我有一个实体框架,我的数据很好地回来了,即我有这个设置,例如:

型号:

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);
            }
         }
    }
}

视图并不重要 - 一个基于Kendo UI的标准网格视图,可以调用&#34; Read&#34;常规以上。我还对代码进行了一些修改,以便对我正在做的事情有一个基本的了解。

我想要做的是将超链接与每个ID连接起来,并将其显示在gridview中每个项目的列上,这样用户就可以点击该链接然后关闭它们转到另一个页面,在那里他们可以编辑他们的项目。我不能做上面已经注释掉的那一行,因为&#34; Id&#34;是数据库中的一个int,我需要将HTML包含在字符串中或者可能是对象中吗?无论哪种方式,他们都不会混合现在的格式,LINQ似乎无法让你即时改变它。

  • 我尝试了SqlFunctions.ConvertString,但它甚至不会将SqlFunctions识别为类型。
  • 我会使用内置编辑功能,但是我需要在其他页面上显示其他数据库表格中的数据以及ID,而Kendo控件只允许您一次关注一个表格。

因此,简而言之,如何使用此Select语句将链接插入gridview列,或者我可以吗?或者是否有其他方法可以在返回之前编辑Json数据?或者人们是否完全采取其他方式呢?

1 个答案:

答案 0 :(得分:2)

我会将网址作为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>");  


    })
    ....
)