Linq 为href中项目ID为的每个项目添加到剑道UI gridview的链接
我正在Razor MVC.NET中开发。我有一个实体框架,在这个框架中,我的数据可以很好地恢复,也就是说,我设置了这个框架,例如: 型号:Linq 为href中项目ID为的每个项目添加到剑道UI gridview的链接,linq,gridview,kendo-ui,kendo-grid,kendo-asp.net-mvc,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; s
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);
}
}
}
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用System.Web;
使用System.Web.Mvc;
使用System.Data.Entity;
使用MyProject.Entities;
使用MyProject.Data;
使用Kendo.Mvc.UI;
使用Kendo.Mvc.Extensions;
使用MyProject.Web.Models;
命名空间MyProject.Web.Controllers
{
公共类培训控制员:控制员
{
[HttpGet]
公共行动结果索引()
{
返回视图();
}
[接受动词(HttpVerbs.Post)]
公共操作结果读取([DataSourceRequest]DataSourceRequest请求)
{
使用(var db=新的MyDb(false))
{
var data=db.Training.Select(d=>newtrainingmodel
{
Id=d.Id,
Name=d.Name
//我想这样做,在这里:
//editLink=“”;
}).ToDataSourceResult(请求);
返回Json(数据,JsonRequestBehavior.AllowGet);
}
}
}
}
视图并不重要-一个标准的基于剑道UI的gridview,调用上面的“读取”例程。我还对代码做了一些修改,只是为了让大家对我正在做的事情有一个基本的了解
我想做的是将一个超链接与每个ID连接起来,并将其显示在gridview中每个项目的列上,这样用户就可以单击该链接并转到另一个页面,在那里他们可以编辑他们的项目。我不能做上面我注释掉的那一行,因为“Id”是数据库中的一个int,我需要把HTML放在一个字符串或者一个对象中?无论哪种方式,它们都不会以当前的格式混合,LINQ似乎也不允许您在运行中对其进行更改
- 我尝试了
,但它甚至无法将SqlFunctions.ConvertString
识别为一种类型李>SqlFunctions
- 我会使用内置的编辑功能,但是我需要在另一个页面上显示来自其他数据库表的数据,这些数据与ID一起显示,而剑道控件只允许您一次只关注一个表
那么,简而言之,如何使用Select语句将链接插入gridview列,或者我可以这样做?或者,在返回Json数据之前,是否有其他方法来编辑Json数据?或者人们完全是以其他方式这样做的?我会将url作为字符串发送过来,例如
url.Action()
,然后在客户端使用带有锚的网格列上的列。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>");
})
....
)
@(Html.Kendo().Grid())
.Name(“myGrid”)
.列(列=>
{
columns.Bound(t=>t.editLink).Title(“Action”).ClientTemplate(“”);
//或
columns.Bound(t=>t.id).Title(“Action”).ClientTemplate(“”);
})
....
)
谢谢,但是d.Id.ToString()
不起作用。“LINQ to Entities无法识别方法'System.String ToString()'方法,并且此方法无法转换为存储表达式”是错误。Linq不允许使用.ToString()。不过,在您的第二部分中,网格配置是有效的!你是对的,我可以在第2列中使用id 1。绑定语句。我刚刚添加了columns.Bound(p=>p.Id).Title(“Action”).ClientTemplate(“”)代码>而且它工作得非常好!谢谢