我有一个使用mvc和批处理编辑的剑道网格。一切工作正常,除了当我的控制器为网格中的外键列返回错误时,直到用户单击网格单元格,网格才会显示验证消息。一旦他们单击网格单元格,就会显示验证消息。
p.s。永远不会调用grid onerror方法。
这是我的网格:
@(Html.Kendo().Grid<eclERC.ViewModels.PaymentDetailTerm>(Model.PaymentDetailTerms)
.Name("TermGrid")
.DataSource(ds => ds
.Ajax()
.ServerOperation(false)
.Model(m =>
{
m.Field(d => d.TermTypeTitle).Editable(false);
m.Field(d => d.PayeePartyName).Editable(false);
m.Field(d => d.FrequencyDescription).Editable(false);
m.Field(d => d.PayoffBalance).Editable(false);
m.Field(d => d.PeriodicAmount).Editable(false);
m.Field(d => d.OriginalUnpaidBalance).Editable(false);
m.Field(d => d.ClerkFeeflag).Editable(false);
m.Field(d => d.Disbursed).Editable(true);
m.Field(d => d.Holdflag).Editable(true);
m.Field(d => d.HoldReasonId).Editable(true);
m.Field(d => d.HoldReason);
})
.Events(events => events.Error("onGridError"))
)
.Columns(columns =>
{
columns.Bound(e => e.TermTypeTitle).Width(110).Title("Term Type");
columns.Bound(e => e.PayeePartyName).Width(110).Title("Payee");
columns.Bound(e => e.FrequencyDescription).Width(110);
columns.Bound(e => e.PayoffBalance).Width(110);
columns.Bound(e => e.PeriodicAmount).Width(110);
columns.Bound(e => e.OriginalUnpaidBalance).Width(100);
columns.Bound(e => e.ClerkFeeflag).Width(100);
columns.Bound(e => e.Disbursed).Width(100).HtmlAttributes(new { @class = "inputField" });
columns.Bound(e => e.Holdflag).Width(100).HtmlAttributes(new { @class = "inputField" });
columns.ForeignKey(p => p.HoldReason,(System.Collections.IEnumerable)ViewData["HoldReasonId"],"Value","Text")
.EditorViewData(new { HoldReasonId = (System.Collections.IEnumerable)ViewData["HoldReasonId"] })
.EditorTemplateName("HoldReasonEditor").ClientTemplate("#=HoldReason.Value > 0 ? HoldReason.Text : '' #")
.Title("Hold Reason")
.Width(110).HtmlAttributes(new { @class = "inputField" });
})
.Sortable()
.Editable(editable => editable.Mode(GridEditMode.InCell))
.Events(x => { x.Save("function(e){onGridSave(e)}"); x.CellClose("function(e){onCellClose(e)}"); x.databound("function(e){ondatabound(e)}"); })
.Scrollable()
.HtmlAttributes(new { style = "height:350px" }))
这是在表单提交上调用的控制器方法,它添加了模型错误:
[Authorize(Policy = "PaymentCreate")]
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IactionResult> CaseCreate(PaymentCaseCreate paymentCaseCreate,string paymentTendersList,string detailsList)
{
CustomLogger.WriteMessage((int)LoggingLevel.Debug,"Payment Controller CaseCreate entered.",_user.SiteId,_user.SecUserId,"PaymentController",string.Empty);
ViewData["CountyName"] = (_redisDb.StringGet("eclERC" + _user.SecUserId)).ToString();
var details = JsonConvert.DeserializeObject<IEnumerable<PaymentDetailTerm>>(detailsList);
var tenderDetails = JsonConvert.DeserializeObject<IEnumerable<PaymentTender>>(paymentTendersList);
foreach (PaymentDetailTerm detail in details)
{
if (detail.HoldReasonId.IsnullOrZero() && detail.Holdflag)
{
ModelState.AddmodelError("HoldReason","Hold Reason required when Hold is set.");
}
if (!detail.HoldReasonId.IsnullOrZero() && !detail.Holdflag)
{
ModelState.AddmodelError("Holdflag","Hold must be set when Hold Reason supplied.");
}
}
if (ModelState.IsValid)
{
``` {code left out for brevity} ```
}
else
{
var errors = ModelState.Keys.Where(k => ModelState[k].Errors.Count > 0).Select(k => new { propertyName = k,errorMessage = ModelState[k].Errors[0].ErrorMessage });
}
return View(paymentCaseCreate);
}