将Kendo Grid的JS代码移至外部文件时如何获取控制器作者数据
解决方案:通过控制器获取作者数据并迁移JS到外部文件
我来帮你解决这个问题——把Kendo Grid的编辑器逻辑移到外部JS文件,同时通过控制器获取作者数据其实很简单,分两步走就行:
1. 创建控制器方法返回作者数据
首先在你的控制器(比如AuthorsController)里添加一个Action,专门用来返回作者的Json数据:
// ASP.NET MVC 写法 public ActionResult GetAuthors() { // 调用业务层获取所有作者数据,和你原来的逻辑一致 var authors = LibraryApp.BLL.ViewModels.AuthorViewModel.GetAll(); // 允许GET请求获取Json数据 return Json(authors, JsonRequestBehavior.AllowGet); } // 如果是ASP.NET Core,写法更简洁: public IActionResult GetAuthors() { var authors = LibraryApp.BLL.ViewModels.AuthorViewModel.GetAll(); return Json(authors); }
这个方法的作用是从业务层拉取作者数据,序列化为Json格式返回给前端,相当于一个小型的API接口。
2. 修改外部JS文件中的编辑器函数
接下来在你的外部JS文件里,把原来依赖Razor语法的数据源替换成远程请求,让Kendo MultiSelect通过AJAX从刚才的控制器方法获取数据:
function authorsEditor(container, options) { $('<input name="Authors">').appendTo(container) .kendoMultiSelect({ dataValueField: "AuthorId", dataTextField: "AuthorName", dataSource: { transport: { read: { url: "/Authors/GetAuthors", // 替换成你控制器的实际路由 dataType: "json" } } } }); }
关键说明:
- 这里用
transport.read指定了控制器方法的URL,Kendo会自动发起GET请求获取数据 - 确保URL和你的控制器路由匹配,比如如果控制器是
LibraryController,URL就要改成"/Library/GetAuthors" - 你可以先在浏览器直接访问这个URL,确认能返回正确的作者Json数据,避免后续排查问题
这样一来,你的JS代码就完全脱离了Razor语法,可以安心放在外部文件里,同时数据获取逻辑也迁移到了后端控制器,维护起来更清晰。
内容的提问来源于stack exchange,提问作者Vlad
相关产品推荐
相关产品推荐

