我在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
识别为类型。 因此,简而言之,如何使用此Select语句将链接插入gridview列,或者我可以吗?或者是否有其他方法可以在返回之前编辑Json数据?或者人们是否完全采取其他方式呢?
答案 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>");
})
....
)