【发布时间】:2014-05-01 18:45:11
【问题描述】:
我的 Kendo UI Grid 运行良好,但我遇到了页面刷新问题。我注意到如果我刷新浏览器,我刚刚插入的数据就会消失。单元格仍然存在,因为 Grid 认识到应该有数据,并且 Read 操作方法正在触发并返回适当的数据,但数据只是没有显示。有什么想法吗?
控制器:
public ActionResult EditingPopup_Read([DataSourceRequest] DataSourceRequest request, ExpenseReportModel erLineItem, int expenseReportId)
{
if (Request.IsAjaxRequest())
{
return Json(globalKip.DisplayExpenseReportLineItems_Employee(expenseReportId).ToList().ToDataSourceResult(request), JsonRequestBehavior.AllowGet);
}
else
{
return View("Index", erLineItem);
}
}
网格标记:
@(Html.Kendo().Grid<ExpenseReport.MVC.Models.ExpenseReportModel>()
.Name("Grid")
.Columns(columns =>
{
columns.Bound(p => p.ExpenseReportId).Visible(true);
columns.Bound(p => p.ExpenseLineItemId).Visible(true);
columns.Bound(p => p.ExpenseTypeDesc).Title("Expense Type");
columns.Bound(p => p.City).Title("City");
columns.Bound(p => p.StateName).Title("State");
columns.Bound(p => p.Date).Format("{0:d}").Title("Date");
columns.Bound(p => p.Amount).Title("Amount");
columns.Bound(p => p.EndingMileage).Title("Ending Mileage");
columns.Bound(p => p.BeginningMileage).Title("Beginning Mileage");
columns.Command(command => { command.Edit(); command.Destroy(); });
})
.ToolBar(toolbar => toolbar.Create().HtmlAttributes(new { id = "btnAdd" }))
.Editable(editable => editable.Mode(GridEditMode.PopUp).TemplateName("NewExpense").Window(w => w.Width(500)))
.Pageable()
.Scrollable()
.HtmlAttributes(new { style = "height:430px; width=100%" })
.DataSource(dataSource => dataSource
.Ajax()
.PageSize(20)
//.Events(events => events.Sync("onRequestStart"))
.Model(model => model.Id("ExpenseLineItemId"))
.Create(create => create
.Action("EditingPopup_Create", "ExpenseReport")
.Data("erLineItemsCreateData"))
.Read(read => read
.Action("EditingPopup_Read", "ExpenseReport")
.Data("erLineItemsReadData"))
.Update(update => update
.Action("EditingPopup_Update", "ExpenseReport"))
.Destroy(destroy => destroy
.Action("EditingPopup_Destroy", "ExpenseReport").Type(HttpVerbs.Post)))
)
//pass additional data to the READ action method
function erLineItemsReadData() {
return {
expenseReportId: "@ViewBag.ExpenseReportId"
};
}
function erLineItemsCreateData() {
return {
expenseReportId: "@ViewBag.ExpenseReportId"
};
}
function erLineItemsUpdateData() {
return {
expenseReportId: "@ViewBag.ExpenseReportId"
};
}
更新
我设法解决了部分问题。请看下面的代码。现在,当我创建一行时,该行在浏览器刷新后保持不变。然而,现在当页面第一次加载时,一个新的空白行被插入到网格中。我不想要这种行为。另外,如果我添加超过 1 行并刷新页面,我创建的最后一行以外的所有行都会消失。
public ActionResult EditingPopup_Read([DataSourceRequest] DataSourceRequest request, ExpenseReportModel erLineItem, int expenseReportId)
{
if (Request.IsAjaxRequest())
{
var results = globalKip.DisplayExpenseReportLineItems_Employee(expenseReportId).ToList();
for (int i = 0; i < results.Count; i++) // Loop through List with for
{
erLineItem.ExpenseReportId = (int)results[i].ERL_EPR_ID;
erLineItem.ExpenseLineItemId = results[i].ERL_ID;
erLineItem.ExpenseTypeDesc = results[i].ERL_ExpenseType;
erLineItem.City = results[i].ERL_City;
erLineItem.StateName = results[i].ERL_State;
erLineItem.Date = (DateTime)results[i].ERL_Date;
erLineItem.Amount = (Decimal)results[i].ERL_DollarAmount;
erLineItem.EndingMileage = (int)results[i].ERL_EndingMileage;
erLineItem.BeginningMileage = (int)results[i].ERL_BeginningMileage;
}
//return Json(new[] { erLineItem }.ToDataSourceResult(request, ModelState));
return Json(new[] { erLineItem }.ToDataSourceResult(request, ModelState));
//return Json(globalKip.DisplayExpenseReportLineItems_Employee(expenseReportId).ToList().ToDataSourceResult(request), JsonRequestBehavior.AllowGet);
}
else
{
return View("Index", erLineItem);
}
}
【问题讨论】:
-
您能否验证新插入的数据是否也存在于数据库中...插入后
-
是的,它就在那里。这就是让我想知道发生了什么的原因。我做到了,实际上解决了部分问题,请参阅上面的更新。
标签: kendo-ui kendo-grid kendo-asp.net-mvc