我不知所措。
我正在尝试使用Kendo ui工具构建一个嵌套网格。
我有一个非常相似的网格,可以完美地工作,但我的网格中缺少一些东西,因为我不断收到“名称不能为空”的错误。
这是我的index.cshtml
@{
int w1 = 150;
int w2 = 120;
}
<style>
.green {
background-color: greenyellow !important;
}
</style>
<div class="container-fluid">
<div class="row">
<div class="col-lg-12">
<div class="alert alert-primary" role="alert" id="alert-box-error" style="display:none">
Errore !
</div>
</div>
</div>
<div class="row">
<div class="col-lg-12">
@(
Html.Kendo()
.Grid<ModelsExceptionsVM>()
.Name("Grid")
.HtmlAttributes(new { style = "height: 800px" })
.Columns(columns =>
{
columns.Bound(m => m.ExceptionId).Visible(false);
columns.Bound(m => m.ExceptionCode).Title("Codice").Visible(false);
columns.Bound(m => m.ReportCode).Title("Report").Filterable(ftb => ftb.Multi(true).Search(true)).Width(w2);//.EditorTemplateName("ReportsDropdown");
columns.Bound(m => m.Description).Title("Descrizione").Filterable(ftb => ftb.Multi(true).Search(true)).Width(w1);//.EditorTemplateName("SupplierDropdown");
columns.Command(c => c.Destroy()).Width(60);
})
.ToolBar(toolbar =>
{
toolbar.Save();
@*toolbar.Excel();*@
toolbar.Create();
toolbar.Search();
})
.Editable(editable => editable
.Mode(GridEditMode.InCell)
.DisplayDeleteConfirmation(true)
)
.Pageable(pageable => pageable
.Refresh(true)
.PageSizes(true)
.ButtonCount(5)
)
.Navigatable()
.Sortable()
.Filterable()
.Scrollable()
.ClientDetailTemplateId("template")
.Resizable(resize => resize.Columns(true))
.Reorderable(reorder => reorder.Columns(true))
.DataSource(dataSource => dataSource
.Ajax()
.PageSize(20)
.Batch(true)
.ServerOperation(false)
.Model(model =>
{
model.Id(x => x.ExceptionId);
})
.Read(read => read.Action("Read", "Models"))
.Update(update => update.Action("Update", "Models"))
.Create(create => create.Action("Create", "Models"))
.Destroy(delete => delete.Action("Delete", "Models"))
)
)
</div>
</div>
</div>
<script id="template" type="text/kendo-tmpl">
@(Html.Kendo().Grid<ModelException>()
.Name("grid_#=ExceptionId#")
.Columns(columns =>
{
columns.Bound(m => m.ExceptionReportsModelId).Title("Id").Visible(false);
columns.Bound(o => o.Model).Title("Modello").Width(100);
columns.Bound(o => o.ReportValue).Title("Valore").Width(100);
columns.Command(c => c.Destroy()).Width(60);
})
.DataSource(dataSource => dataSource
.Ajax()
.Batch(true)
.ServerOperation(false)
.Read(read => read.Action("Hierarchy_ModelRead", "Models", new { ExceptionId = "#=ExceptionId#" }))
.Update(update => update.Action("Hierarchy_ModelUpdate", "Models", new { ExceptionId = "#=ExceptionId#" }))
.Create(create => create.Action("Hierarchy_ModelCreate", "Models", new { ExceptionId = "#=ExceptionId#" }))
.Destroy(delete => delete.Action("Hierarchy_ModelDelete", "Models", new { ExceptionId = "#=ExceptionId#" }))
@* .Model(model =>
{
model.Id(x => x.ExceptionReportsModelId);
})*@
)
.Editable(editable => editable
.Mode(GridEditMode.InCell)
.DisplayDeleteConfirmation(true)
)
.ToolBar(toolbar =>
{
toolbar.Save();
toolbar.Create();
})
.ToClientTemplate()
)
</script>
<script type="text/javascript">
function onError() {
$("#alert-box-error")
.fadeIn('slow')
.delay(3000)
.fadeOut('slow');
}
</script>
问题似乎出在模板组件(实际的嵌套网格)上,因为如果我删除它,主网格就会工作。
型号:
public class ModelsExceptionsVM
{
public Guid ExceptionId { get; set; }
public int ExceptionCode { get; set; }
public string ReportCode { get; set; }
public string Description { get; set; }
}
public class ModelException
{
public Guid ExceptionReportsModelId { get; set; }
public string Model { get; set; }
public string ReportValue { get; set; }
}
控制器:
[Area("Exceptions")]
public class ModelsController : Controller
{
private readonly DepartmentsContext _db;
private readonly IConfiguration _configuration;
public ModelsController(DepartmentsContext db, IConfiguration configuration)
{
_db = db;
_configuration = configuration;
}
public IActionResult Index()
{
return View();
}
public async Task<IActionResult> Create([DataSourceRequest] DataSourceRequest request, [Bind(Prefix = "models")] IEnumerable<ModelsExceptionsVM> vMs)
{
if (vMs != null)
{
foreach (var ex in vMs)
{
var create = new Persistence.Models.ExceptionsReports();
create.ReportCode = ex.ReportCode;
create.Description = ex.Description;
_db.ExceptionsReports.Add(create);
}
await _db.SaveChangesAsync();
}
return Json(vMs.ToDataSourceResult(request));
}
public async Task<ActionResult> Hierarchy_ModelCreate(Guid ExceptionId, [DataSourceRequest] DataSourceRequest request, [Bind(Prefix = "models")] IEnumerable<ModelException> vMs)
{
if (vMs != null)
{
foreach (var ex in vMs)
{
var create = new Persistence.Models.ExceptionReportsModels();
create.ValueForReport = ex.ReportValue;
create.Model = ex.Model;
_db.ExceptionReportsModels.Add(create);
}
await _db.SaveChangesAsync();
}
return Json(vMs.ToDataSourceResult(request));
}
public async Task<ActionResult> Read([DataSourceRequest] DataSourceRequest request)
{
var result = await _db.ExceptionsReports
.OrderBy(x => x.ExceptionCode)
.Select(x=>new ModelsExceptionsVM
{
Description = x.Description,
ExceptionCode = x.ExceptionCode,
ExceptionId = x.ExceptionId,
ReportCode = x.ReportCode,
})
.ToListAsync();
return Json(result.ToDataSourceResult(request));
}
public async Task<ActionResult> Hierarchy_ModelRead(Guid ExceptionId, [DataSourceRequest] DataSourceRequest request)
{
var data = await _db.ExceptionReportsModels
.Where(x => x.ExceptionId == ExceptionId)
.Select(z=> new ModelException
{
ExceptionReportsModelId =z.ExceptionsReportsModelId,
Model = z.Model,
ReportValue = z.ValueForReport
})
.ToListAsync();
return Json(data.ToDataSourceResult(request));
}
public async Task<ActionResult> Update([DataSourceRequest] DataSourceRequest request, [Bind(Prefix = "models")] IEnumerable<ModelsExceptionsVM> vMs)
{
if (vMs != null)
{
foreach (var ex in vMs)
{
var update = await _db.ExceptionsReports.FirstOrDefaultAsync(t => ex.ExceptionCode == t.ExceptionCode);
update.ReportCode = ex.ReportCode;
update.Description = ex.Description;
}
await _db.SaveChangesAsync();
}
return Json(vMs.ToDataSourceResult(request));
}
public async Task<ActionResult> Hierarchy_ModelUpdate(Guid ExceptionId, [DataSourceRequest] DataSourceRequest request, [Bind(Prefix = "models")] IEnumerable<ModelException> vMs)
{
if (vMs != null)
{
foreach (var ex in vMs)
{
var update = await _db.ExceptionReportsModels.FirstOrDefaultAsync(t => ex.ExceptionReportsModelId == t.ExceptionsReportsModelId);
update.Model = ex.Model;
update.ValueForReport = ex.ReportValue;
}
await _db.SaveChangesAsync();
}
return Json(vMs.ToDataSourceResult(request));
}
public async Task<ActionResult> Delete([DataSourceRequest] DataSourceRequest request, [Bind(Prefix = "models")] IEnumerable<ModelsExceptionsVM> vMs)
{
if (vMs != null)
{
foreach (ModelsExceptionsVM vM in vMs)
{
var dvME = await _db.ExceptionsReports.FirstOrDefaultAsync(t => t.ExceptionCode == vM.ExceptionCode);
if (dvME != null)
{
_db.ExceptionsReports.Remove(dvME);
}
}
await _db.SaveChangesAsync();
}
return Json(vMs.ToDataSourceResult(request));
}
public async Task<ActionResult> Hierarchy_ModelDelete(Guid ExceptionId, [DataSourceRequest] DataSourceRequest request, [Bind(Prefix = "models")] IEnumerable<ModelException> vMs)
{
if (vMs != null)
{
foreach (ModelException vM in vMs)
{
var dvME = await _db.ExceptionReportsModels.FirstOrDefaultAsync(t => t.ExceptionsReportsModelId == vM.ExceptionReportsModelId);
if (dvME != null)
{
_db.ExceptionReportsModels.Remove(dvME);
}
}
await _db.SaveChangesAsync();
}
return Json(vMs.ToDataSourceResult(request));
}
}
我试过对几乎所有内容进行注释和取消注释,但都无济于事。正在重命名模板,正在更改模型。。。我会错过什么?
提前谢谢。
EDIT:我已经注释了嵌套网格的所有可编辑部分(因此列中的.editable()函数、Destroy()函数和工具栏中的保存/创建函数),现在工作正常。但我确实需要编辑部分,那有什么用呢?