C# 发布中未调用带有Telerik Kendo网格读取方法([DataSourceRequest])的ASP.NET Core 2.0

C# 发布中未调用带有Telerik Kendo网格读取方法([DataSourceRequest])的ASP.NET Core 2.0,c#,asp.net-mvc,telerik,kendo-grid,asp.net-core-2.0,C#,Asp.net Mvc,Telerik,Kendo Grid,Asp.net Core 2.0,我用Telerik Kendo UI和Asp.Net Core 2.0控件创建了一个应用程序。在本地,我们可以在Visual Studio 2017中无错误地运行相同的代码,但在本地IIS中发布后,会出现以下错误(请参阅附件) 错误:-“404(未找到)” 检查错误时,发现未调用网格的唯一读取方法(可能是由于“[DataSourceRequest]DataSourceRequest”参数引起的)(其他 操作方法的调用与下面的代码“GetRecordStatusList()”类似 控制器: pu

我用Telerik Kendo UI和Asp.Net Core 2.0控件创建了一个应用程序。在本地,我们可以在Visual Studio 2017中无错误地运行相同的代码,但在本地IIS中发布后,会出现以下错误(请参阅附件)

错误:-“404(未找到)”

检查错误时,发现未调用网格的唯一读取方法(可能是由于“[DataSourceRequest]DataSourceRequest”参数引起的)(其他 操作方法的调用与下面的代码“GetRecordStatusList()”类似

控制器:

public class MastersController : Controller
{
    private IAllRepository<StateMaster> iAllStateRepository;

    public IActionResult StateMaster()
    {
        List<SelectListItem> statusList = new List<SelectListItem>() {
            new SelectListItem{Text = "Active", Value = "1" },
            new SelectListItem{Text = "Inactive", Value = "2" }
        };

        HttpContext.Session.SetInt32("UserId", 1);
        HttpContext.Session.SetString("UserName", "Admin");
        ViewBag.UserName = HttpContext.Session.GetString("UserName");

        return View();
    }

    //This action method is not called in published-code
    public ActionResult GetStateList([DataSourceRequest]DataSourceRequest request)
    {
        this.iAllStateRepository = new StateMasterRepository();
        var result = iAllStateRepository.GetModelList();
        var dsResult = result.ToDataSourceResult(request);
        return Json(dsResult);
    }

    public JsonResult GetRecordStatusList()
    {
        List<SelectListItem> statusList = new List<SelectListItem>() {
            new SelectListItem{Text = "Active", Value = "1" },
            new SelectListItem{Text = "Inactive", Value = "2" }
        };
        return Json(statusList);
    }
}
公共类主控制器:控制器
{
私人档案馆;
公共IActionResult国家元首()
{
列表状态列表=新列表(){
新建SelectListItem{Text=“Active”,Value=“1”},
新建SelectListItem{Text=“Inactive”,Value=“2”}
};
HttpContext.Session.SetInt32(“UserId”,1);
HttpContext.Session.SetString(“用户名”、“管理员”);
ViewBag.UserName=HttpContext.Session.GetString(“用户名”);
返回视图();
}
//在已发布的代码中未调用此操作方法
公共操作结果GetStateList([DataSourceRequest]DataSourceRequest请求)
{
this.ialstaterepository=新的StateMasterRepository();
var result=IALLMaterialDepository.GetModelList();
var dsResult=result.ToDataSourceResult(请求);
返回Json(dsResult);
}
public JsonResult GetRecordStatusList()
{
列表状态列表=新列表(){
新建SelectListItem{Text=“Active”,Value=“1”},
新建SelectListItem{Text=“Inactive”,Value=“2”}
};
返回Json(状态列表);
}
}
更新了:这是视图(StateMaster.cshtml)代码


@(Html.Kendo().Grid())
.名称(“国家电网”)
.列(列=>
{
columns.Bound(p=>p.StateName).Filterable(ftb=>ftb.Cell(Cell=>Cell.ShowOperators(true).Operator(“contains”)).Width(120);
columns.Bound(p=>p.Abbr).Filterable(ftb=>ftb.Cell(Cell=>Cell.ShowOperators(true).Operator(“contains”)).Width(120).MinScreenWidth(800);
Command(Command=>{Command.Edit();Command.Destroy();}).Width(70);
})
.ToolBar(ToolBar=>
{
toolbar.ClientTemplateId(“toolbarStatus”);
})
.NoRecords(e=>e.Template(“未找到数据!”)
.Pageable(p=>{p.Refresh(true);p.pagesize(true);}).Navigatable()
.Sortable(s=>s.SortMode(GridSortMode.MultipleColumn)).Scrollable(s=>s.Enabled(true))
.HtmlAttributes(新的{style=“height:100%;”})
.DataSource(DataSource=>DataSource
.Ajax()
.页面大小(10)
.ServerOperation(真)
.Model(m=>
{
m、 Id(s=>s.StateId);
m、 字段(f=>f.StateName);
m、 字段(f=>f.Abbr);
m、 字段(f=>f.RecordStatus);
})
.Read(Read=>Read.Action(“GetStateList”、“Masters”))
)
.resize可调整大小(resize=>resize.Columns(false))
)
下图是开发过程,显示网格的读取方法工作正常


我遇到过这样一种情况:如果在站点中的任何其他位置的布线中映射了区域,则有时找不到控制器操作。要解决此问题,您可以通过执行以下操作清除该区域:

  .DataSource(s => s.Ajax().Read(read => read.Action("GetStateList", "Masters", new {area = ""})))
我还建议在操作中添加
[HttpGet]
属性。您可以通过如下所示在上指定
.Type(HttpVerbs.Get)
来强制剑道使用它:

  .DataSource(s => s.Ajax().Read(read => read.Action("GetStateList", "Masters", new {area = ""}).Type(HttpVerbs.Get)))

很抱歉问了一个可能很愚蠢的问题,但您是从localhost访问网站的,不是从其他主机访问的,对吗?您是否将IIS中的URL(localhost)映射到正确的目录?您是否尝试使用其他URL?我已正确映射它。在“已发布代码”视图中呈现,并且“GetRecordStatusList”操作方法正在工作,但与Kendo网格读取方法绑定的操作方法(“GetStateList”)不工作。@TarakPrajapati显示发出请求的客户端代码?@Nkosi,我已用请求的代码更新了问题。还更新了图像。请尝试使用“发布前删除所有现有文件”选项进行发布
  .DataSource(s => s.Ajax().Read(read => read.Action("GetStateList", "Masters", new {area = ""}).Type(HttpVerbs.Get)))