我正在使用来自telerik https://demos.telerik.com/aspnet-core/grid/index的kendo ui网格,但我在使用更新函数时遇到了一个问题,它不会触发。我还使用dapper和dapper contrib来帮助我的查询更清晰。
https://dapper-tutorial.net/dapper-contrib
我已经尝试使用上面的教程,创建函数可以工作,但更新函数不起作用。
@(Html.Kendo().Grid<FuelActivityTrackerDal.Models.ActivityHeader>()
.Name("grid")
.Columns(columns =>
{
columns.Bound(p => p.Description).Filterable(false);
columns.Bound(p => p.Name);
columns.Bound(p => p.ActivityDate).Format("{0:MM/dd/yyyy}");
columns.Bound(p => p.EmployeeName);
columns.Bound(p => p.Status);
columns.Command(command => { command.Edit(); command.Destroy(); }).Width(160);
})
.ToolBar(toolbar => toolbar.Create())
.Editable(editable => editable.Mode(GridEditMode.PopUp))
.Scrollable()
.HtmlAttributes(new { style = "height:200px" })
.Pageable()
.Sortable()
.Filterable()
.DataSource(dataSource => dataSource
.Ajax()
.Events(events => events.Error("error_handler"))
.Model(model => model.Id(p => p.ActivityItemId))
.PageSize(Model.Count())
.Read(read => read.Action("Activity_Read", "Activity"))
.Update(update => update.Action("EditingPopup_Update", "Activity").Type(HttpVerbs.Post))
)
)下面是我的模型,如下所示
public class ActivityHeader
{
public int ActivityCompanyId { get; set; } //(int, null)
public DateTime ActivityDate { get; set; } //(date, null)
public string Name { get; set; } //(nvarchar(350), null)
public DateTime ActivityEndDate { get; set; } //(datetime, null)
public string Description { get; set; } //(nvarchar(max), null)
public int ActivityItemId { get; set; } //(int, null)
public DateTime HoursLeftOnProject { get; set; } //(time(7), null)
public string Status { get; set; } //(nchar(10), null)
public int ActivityType { get; set; } //(int, null)
public DateTime CreatedDate { get; set; } //(date, null)
public string CreatedBy { get; set; } //(nvarchar(50), null)
public bool isActive { get; set; } //(bit, null)
public bool isDeleted { get; set; } //(bit, null)
public bool isArchived { get; set; } //(bit, null)
public string SOP { get; set; } //(nvarchar(50), null)
public int DepartmentId { get; set; } //(int, null)
public string EmployeeName { get; set; } //(nvarchar(301), null)
} 这是我的模态方法。
[HttpPost]
public ActionResult EditingPopup_Update([DataSourceRequest] DataSourceRequest request, ActivityHeader activity)
{
if (activity != null && ModelState.IsValid)
{
UpdateActivity(activity);
}
return Json(new[] { activity }.ToDataSourceResult(request, ModelState));
}我的更新活动调用如下所示
public bool UpdateActivity(ActivityHeader activityHeader)
{
return _activityRepo.UpdateActivityHeader(activityHeader);
}在这里,我调用了dapper contrib update函数。
public bool UpdateActivityHeader(ActivityHeader activitys)
{
bool retval = false;
using (
IDbConnection conn = Connection)
{
conn.Open();
conn.Update(activitys);
retval = true;
}
}该方法不会被触发,但也不会产生任何错误。
显示我的项目布局以避免混淆控制器名称

发布于 2019-02-17 03:43:07
我发现是id指向了错误的列,修复后就没问题了。
@(Html.Kendo().Grid<FuelActivityTrackerDal.Models.ActivityHeader>()
.Name("grid")
.Columns(columns =>
{
columns.Bound(p => p.Description).Filterable(false);
columns.Bound(p => p.Name);
columns.Bound(p => p.ActivityDate).Format("{0:MM/dd/yyyy}");
columns.Bound(p => p.EmployeeName);
columns.Bound(p => p.Status);
columns.Command(command => { command.Edit(); command.Destroy(); }).Width(160);
})
.ToolBar(toolbar => toolbar.Create())
.Editable(editable => editable.Mode(GridEditMode.PopUp))
.Scrollable()
.Pageable()
.Sortable()
.Filterable()
.DataSource(dataSource => dataSource
.Ajax()
.Events(events => events.Error("error_handler"))
.Model(model => model.Id(p => p.ActivityHeaderId))
.PageSize(Model.Count())
.Read(read => read.Action("Activity_Read", "Activity"))
.Update(update => update.Action("EditingPopup_Update", "Activity").Type(HttpVerbs.Post))
)
)我在控制器中用下面的post属性标记了代码
[AcceptVerbs("Post")]
public ActionResult EditingPopup_Update([DataSourceRequest] DataSourceRequest request, ActivityHeader activity)
{
if (activity != null )
{
UpdateActivity(activity);
}
return Json(new[] { activity }.ToDataSourceResult(request, ModelState));
}https://stackoverflow.com/questions/54723859
复制相似问题