Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linq 为href中项目ID为的每个项目添加到剑道UI gridview的链接_Linq_Gridview_Kendo Ui_Kendo Grid_Kendo Asp.net Mvc - Fatal编程技术网

Linq 为href中项目ID为的每个项目添加到剑道UI gridview的链接

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

我正在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);
            }
         }
    }
}
使用系统;
使用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(“”)而且它工作得非常好!谢谢