Asp.net mvc KendoUI MVC Json-它们一起工作吗?

Asp.net mvc KendoUI MVC Json-它们一起工作吗?,asp.net-mvc,kendo-ui,Asp.net Mvc,Kendo Ui,我是客户机服务器,SQL程序员(RadGuy),公司决定我们必须转向.NET环境。我们正在检查平台 本周我学习了MVC4和实体框架,我读了很多关于KendoUI的书。我对此持怀疑态度,因为大多数示例都与KendoGrid+WebApi一起提供。我对WebApi知之甚少,但我真的很喜欢实体的东西,所以我不认为我应该给它一个机会 我想问一些看似幼稚的问题,但答案会帮我很大的忙 一旦我从现有数据库创建了实体,我可以得到Json格式的结果,并用它来提供KendoGrid吗 如果是,如何进行?我的意思是:

我是客户机服务器,SQL程序员(RadGuy),公司决定我们必须转向.NET环境。我们正在检查平台

本周我学习了MVC4和实体框架,我读了很多关于KendoUI的书。我对此持怀疑态度,因为大多数示例都与KendoGrid+WebApi一起提供。我对WebApi知之甚少,但我真的很喜欢实体的东西,所以我不认为我应该给它一个机会

我想问一些看似幼稚的问题,但答案会帮我很大的忙

  • 一旦我从现有数据库创建了实体,我可以得到Json格式的结果,并用它来提供KendoGrid吗

    如果是,如何进行?我的意思是:

  • 如何在控制器内以Json格式转换结果

  • 在KendoGrid的transport属性中,我应该放置控制器/操作的URL

    最天真的一个

  • Telerik有没有想过提供一个可视化工具来创建和配置kendoGrid?因为现在需要太多的编码,所以要使它更为RAD。可能是一个向导,您可以使用网格列、数据源、传输选择器等连接实体


  • 是的,您可以使用JsonResult或指定了allow get的JSON将JSON发送回kendo UI。您可以在传输中设置url,并将json指定为类型


    关于上一个问题,目前没有可视化工具,但是剑道UI有可用的帮助器方法

    是的,您可以使用JsonResult或指定了allow get的JSON将JSON发送回剑道UI。您可以在传输中设置url,并将json指定为类型


    关于你的最后一个问题,目前没有可视化工具,但是剑道UI有辅助方法可用,我希望你选择剑道实体路径,尽管会有一个学习曲线。不,关于问题4。但是让我给你一个使用Razor视图引擎的快速启动,回答1、2和3

    首先,EF正在创建业务对象。您“应该”将这些转换为MVC中的模型。在本例中,此人来自EF。我认为这是展平,因为它删除了对象的深度,尽管它仍然可用,以便您可以引用Person.Titles.Name之类的内容(如果您的数据库是这样设置的)。您还可以插入DataAnnotations,它只是一个摇滚乐

    using System.Collections.Generic;
    using System.ComponentModel.DataAnnotations;
    using System.Linq;
    using Project.Business;
    
    namespace Project.Web.Models
    {
        public class PersonModel
        {
            public int Id { get; set; }
            [Required(ErrorMessage = "Last Name is required.")]
            public string LastName { get; set; }
            [Required(ErrorMessage = "First Name is required.")]
            public string FirstName { get; set; }
            [Display(Name = "Created")]
            public System.DateTime StampCreated { get; set; }
            [Display(Name = "Updated")]
            public System.DateTime StampUpdated { get; set; }
            [Display(Name = "Enabled")]
            public bool IsActive { get; set; }
    
            public PersonModel()
            {}
            public PersonModel(Person person)
            {
                Id = person.Id;
                FirstName = person.FirstName;
                LastName = person.LastName;
                StampCreated = person.StampCreated;
                StampUpdated = person.StampUpdated;
                IsActive = person.IsActive;
            }
    
            public static IList<PersonModel> FlattenToThis(IList<Person> people)
            {
                return people.Select(person => new PersonModel(person)).ToList();
            }
    
        }
    }
    
    是的,就这些。这是一个简单的例子,它们可能变得更复杂。或者你不必一开始就使用它们

    最后,我认为你真正想要的是

    public partial class PeopleController : Controller
    {
        private readonly IPersonDataProvider _personDataProvider;
    
        public PeopleController() : this(new PersonDataProvider())
        {}
        public PeopleController(IPersonDataProvider personDataProvider)
        {
            _personDataProvider = personDataProvider;
        }
    
        public ActionResult Manage()
        {
    >>> Left in as teaser, good to apply a special Model to a View to pass goodies ;)
            var model = new PeopleViewModel();
            model.AllQualifications = QualificationModel.FlattenToThis(_qualificationDataProvider.Read());
            return View(model);
        }
    
        [HttpPost]
        public JsonResult CreatePerson([DataSourceRequest]DataSourceRequest request, Person person)
        {
            if (ModelState.IsValid)
            {
                try
                {
                    person = _personDataProvider.Create(person);
                }
                catch (Exception e)
                {
                    ModelState.AddModelError(string.Empty, e.InnerException.Message);
                }
            }
            var persons = new List<Person> {person};
            DataSourceResult result = PersonModel.FlattenToThis(persons).ToDataSourceResult(request, ModelState);
            return Json(result, JsonRequestBehavior.AllowGet);
        }
    
        public JsonResult ReadPeople([DataSourceRequest]DataSourceRequest request)
        {
            var persons = _personDataProvider.Read(false);
            DataSourceResult result = PersonModel.FlattenToThis(persons).ToDataSourceResult(request);
            return Json(result, JsonRequestBehavior.AllowGet);
        }
    
        [HttpPost]
        public JsonResult UpdatePerson([DataSourceRequest]DataSourceRequest request, Person person)
        {
            if (ModelState.IsValid)
            {
                try
                {
                    person = _personDataProvider.Update(person);
                }
                catch (Exception e)
                {
                    ModelState.AddModelError(string.Empty, e.InnerException.Message);
                }
            }
            var persons = new List<Person>() {person};
            DataSourceResult result = PersonModel.FlattenToThis(persons).ToDataSourceResult(request, ModelState);
            return Json(result, JsonRequestBehavior.AllowGet);
        }
    
        [HttpPost]
        public JsonResult DestroyPerson([DataSourceRequest]DataSourceRequest request, Person person)
        {
            if (ModelState.IsValid)
            {
                try
                {
                    person = _personDataProvider.Destroy(person);
                }
                catch (Exception e)
                {
                    ModelState.AddModelError(string.Empty, "There was an error deleting this record, it may still be in use.");
                }
            }
            var persons = new List<Person>() {person};
            DataSourceResult result = PersonModel.FlattenToThis(persons).ToDataSourceResult(request, ModelState);
            return Json(result, JsonRequestBehavior.AllowGet);
        }
    }
    
    公共部分类PeopleController:控制器
    {
    私有只读IPersonDataProvider\u personDataProvider;
    public PeopleController():此(新PersonDataProvider())
    {}
    公共人员控制器(IPersonDataProvider personDataProvider)
    {
    _personDataProvider=personDataProvider;
    }
    公共行动结果管理()
    {
    >>>留作提示,很适合将特殊模型应用于视图以传递商品;)
    var模型=新PeopleViewModel();
    model.AllQualifications=QualificationModel.flattotthis(_qualificationDataProvider.Read());
    返回视图(模型);
    }
    [HttpPost]
    公共JsonResult CreatePerson([DataSourceRequest]DataSourceRequest请求,Person)
    {
    if(ModelState.IsValid)
    {
    尝试
    {
    person=\u personDataProvider.Create(person);
    }
    捕获(例外e)
    {
    AddModelError(string.Empty,e.InnerException.Message);
    }
    }
    var persons=新列表{person};
    DataSourceResult result=PersonModel.FlattToThis(persons).ToDataSourceResult(request,ModelState);
    返回Json(结果,JsonRequestBehavior.AllowGet);
    }
    公共JsonResult ReadPeople([DataSourceRequest]DataSourceRequest请求)
    {
    var persons=\u personDataProvider.Read(false);
    DataSourceResult result=PersonModel.planttothis(persons.ToDataSourceResult(request);
    返回Json(结果,JsonRequestBehavior.AllowGet);
    }
    [HttpPost]
    public JsonResult UpdatePerson([DataSourceRequest]DataSourceRequest请求,个人)
    {
    if(ModelState.IsValid)
    {
    尝试
    {
    person=\u personDataProvider.Update(person);
    }
    捕获(例外e)
    {
    AddModelError(string.Empty,e.InnerException.Message);
    }
    }
    var persons=新列表(){person};
    DataSourceResult result=PersonModel.FlattToThis(persons).ToDataSourceResult(request,ModelState);
    返回Json(结果,JsonRequestBehavior.AllowGet);
    }
    [HttpPost]
    公共JsonResult DestroyPerson([DataSourceRequest]DataSourceRequest请求,Person)
    {
    if(ModelState.IsValid)
    {
    尝试
    {
    person=\u personDataProvider.Destroy(person);
    }
    捕获(例外e)
    {
    AddModelError(string.Empty,“删除此记录时出错,它可能仍在使用。”);
    }
    }
    var persons=新列表(){person};
    DataSourceResult result=PersonModel.FlattToThis(persons).ToDataSourceResult(request,ModelState);
    返回Json(结果,JsonRequestBehavior.AllowGet);
    }
    }
    
    注意,在本例中,每个方法都将EF Person作为参数,最好使用PersonModel,但我必须显示展平的相反部分。这是因为它们实际上是相同的。如果模型不同,或者您使用的是类工厂,那么它会变得有点棘手

    我故意给你看了所有的积垢操作。如果您不将结果传递回网格,它将表现得很滑稽,并在创建和更新时重复显示或不正确显示更新。信息技术
    @Html.TextBox(string.Empty, string.Empty, new { @class = "k-textbox", @maxlength = "50" })
    
    public partial class PeopleController : Controller
    {
        private readonly IPersonDataProvider _personDataProvider;
    
        public PeopleController() : this(new PersonDataProvider())
        {}
        public PeopleController(IPersonDataProvider personDataProvider)
        {
            _personDataProvider = personDataProvider;
        }
    
        public ActionResult Manage()
        {
    >>> Left in as teaser, good to apply a special Model to a View to pass goodies ;)
            var model = new PeopleViewModel();
            model.AllQualifications = QualificationModel.FlattenToThis(_qualificationDataProvider.Read());
            return View(model);
        }
    
        [HttpPost]
        public JsonResult CreatePerson([DataSourceRequest]DataSourceRequest request, Person person)
        {
            if (ModelState.IsValid)
            {
                try
                {
                    person = _personDataProvider.Create(person);
                }
                catch (Exception e)
                {
                    ModelState.AddModelError(string.Empty, e.InnerException.Message);
                }
            }
            var persons = new List<Person> {person};
            DataSourceResult result = PersonModel.FlattenToThis(persons).ToDataSourceResult(request, ModelState);
            return Json(result, JsonRequestBehavior.AllowGet);
        }
    
        public JsonResult ReadPeople([DataSourceRequest]DataSourceRequest request)
        {
            var persons = _personDataProvider.Read(false);
            DataSourceResult result = PersonModel.FlattenToThis(persons).ToDataSourceResult(request);
            return Json(result, JsonRequestBehavior.AllowGet);
        }
    
        [HttpPost]
        public JsonResult UpdatePerson([DataSourceRequest]DataSourceRequest request, Person person)
        {
            if (ModelState.IsValid)
            {
                try
                {
                    person = _personDataProvider.Update(person);
                }
                catch (Exception e)
                {
                    ModelState.AddModelError(string.Empty, e.InnerException.Message);
                }
            }
            var persons = new List<Person>() {person};
            DataSourceResult result = PersonModel.FlattenToThis(persons).ToDataSourceResult(request, ModelState);
            return Json(result, JsonRequestBehavior.AllowGet);
        }
    
        [HttpPost]
        public JsonResult DestroyPerson([DataSourceRequest]DataSourceRequest request, Person person)
        {
            if (ModelState.IsValid)
            {
                try
                {
                    person = _personDataProvider.Destroy(person);
                }
                catch (Exception e)
                {
                    ModelState.AddModelError(string.Empty, "There was an error deleting this record, it may still be in use.");
                }
            }
            var persons = new List<Person>() {person};
            DataSourceResult result = PersonModel.FlattenToThis(persons).ToDataSourceResult(request, ModelState);
            return Json(result, JsonRequestBehavior.AllowGet);
        }
    }
    
    using System;
    using System.Collections.Generic;
    using System.Data;
    using System.Diagnostics;
    using System.Linq;
    using Project.Business;
    
    public class PersonDataProvider : ProviderBase, IPersonDataProvider
    {
        public Person Create(Person person)
        {
            try
            {
                person.StampCreated = DateTime.Now;
                person.StampUpdated = DateTime.Now;
    
                Context.People.Attach(person);
                Context.Entry(person).State = EntityState.Added;
                Context.SaveChanges();
                return person;
            }
            catch (Exception e)
            {
                Debug.WriteLine(e.Message);
                throw;
            }
        }
    
        public IList<Person> Read(bool showAll)
        {
            try
            {
                return (from q in Context.People
                          orderby q.LastName, q.FirstName, q.StampCreated
                          where (q.IsActive == true || showAll)
                          select q).ToList();
            }
            catch (Exception e)
            {
                Debug.WriteLine(e.Message);
                throw;
            }
        }
    
    ...
    
    }