ASP.Net 核心 - 如何在不刷新的情况下发送消息以从控制器查看?
ASP.Net Core - How to send message to view from controller without refreshing?
我想在不刷新的情况下显示来自控制器的自定义 success/error 消息。
我试过了,但看起来需要刷新页面才能显示数据:
观点:
@if (ViewBag.Message != null)
{
<span>@ViewBag.Message</span>
}
控制器:
if (CurrentOrgLevel < MaxOrgLevel)
{
if (ModelState.IsValid && CurrentOrgLevel < MaxOrgLevel)
{
orgStructure.Insert(org, ModelState);
}
}
else
{
ViewBag.Message = "Error: Max level reached.";
}
这是由 telerik 控件树列表 add child
事件触发的:https://demos.telerik.com/aspnet-core/treelist/editing
树列表:
@(Html.Kendo().TreeList<OCIT.Data.Models.OrgStructure>()
.Name("treelist")
.Toolbar(toolbar => toolbar.Create().Text("Add " + sessionUser.Level1Name))
.Columns(columns =>
{
columns.Add().Field(e => e.LevelName).Width(40);
columns.Add().Field(e => e.Name).Width(100);
columns.Add().Field(e => e.Level).Width(26);
columns.Add().Width(100).Command(c =>
{
c.CreateChild().Text("Add child");
c.Edit();
c.Destroy();
})
.HtmlAttributes(new {style = "text-align: center;"});
})
.Editable()
.Sortable()
.Filterable()
.DataSource(dataSource => dataSource
.Create(create => create.Action("Create", "OrgStructure"))
.Read(read => read.Action("All", "OrgStructure").Data("treelistParam"))
.Update(update => update.Action("Update", "OrgStructure"))
.Destroy(delete => delete.Action("Destroy", "OrgStructure"))
.ServerOperation(false)
.Model(m =>
{
m.Id(f => f.NodeId);
m.ParentId(f => f.ParentNodeId).DefaultValue(sessionUser.DepartmentId);
m.Field(f => f.FiscalYear).DefaultValue(sessionUser.CurrentFiscalYearId);
m.Field(f => f.CreatedDateTime);
m.Field(f => f.DepartmentCode);
m.Field(f => f.Acronym);
m.Field(f => f.DepartmentId).DefaultValue(sessionUser.DepartmentId);
m.Field(f => f.RequiresChildSelect);
m.Expanded(false);
m.Field(f => f.Name);
m.Field(f => f.Level).Editable(false);
m.Field(f => f.LevelName).Editable(false);
m.Field(f => f.ParentNodeId);
})
)
.Height(505)
.Events(events =>
{
events.FilterMenuOpen("onFilterMenuOpen");
events.DataBound("dataBound");
events.DataBinding("dataBinding");
events.Save("onSave");
events.Remove("saveExpandState");
events.Cancel("onCancel");
})
)
点击add child
时,触发onSave
javascript函数:
function onSave() {
}
我相信我们需要 Ajax,但是在 treelist
控件已经处理 ajax post 的情况下如何实现它,但是我们需要自定义 postback?
我需要在不重新加载的情况下显示错误,treelist
控件在数据源中有一个错误处理程序 .Events(ev=>ev.Error("onError"))
:
.DataSource(dataSource => dataSource
.Create(create => create.Action("Create", "OrgStructure"))
.Read(read => read.Action("All", "OrgStructure").Data("treelistParam"))
.Update(update => update.Action("Update", "OrgStructure"))
.Destroy(delete => delete.Action("Destroy", "OrgStructure"))
.Events(ev=>ev.Error("onError"))
.ServerOperation(false)
.Model(m =>
{
m.Id(f => f.NodeId);
m.ParentId(f => f.ParentNodeId).DefaultValue(sessionUser.DepartmentId);
m.Field(f => f.FiscalYear).DefaultValue(sessionUser.CurrentFiscalYearId);
m.Field(f => f.CreatedDateTime);
m.Field(f => f.DepartmentCode);
m.Field(f => f.Acronym);
m.Field(f => f.DepartmentId).DefaultValue(sessionUser.DepartmentId);
m.Field(f => f.RequiresChildSelect);
m.Expanded(false);
m.Field(f => f.Name);
m.Field(f => f.Level).Editable(false);
m.Field(f => f.LevelName).Editable(false);
m.Field(f => f.ParentNodeId);
})
)
我想在不刷新的情况下显示来自控制器的自定义 success/error 消息。
我试过了,但看起来需要刷新页面才能显示数据:
观点:
@if (ViewBag.Message != null)
{
<span>@ViewBag.Message</span>
}
控制器:
if (CurrentOrgLevel < MaxOrgLevel)
{
if (ModelState.IsValid && CurrentOrgLevel < MaxOrgLevel)
{
orgStructure.Insert(org, ModelState);
}
}
else
{
ViewBag.Message = "Error: Max level reached.";
}
这是由 telerik 控件树列表 add child
事件触发的:https://demos.telerik.com/aspnet-core/treelist/editing
树列表:
@(Html.Kendo().TreeList<OCIT.Data.Models.OrgStructure>()
.Name("treelist")
.Toolbar(toolbar => toolbar.Create().Text("Add " + sessionUser.Level1Name))
.Columns(columns =>
{
columns.Add().Field(e => e.LevelName).Width(40);
columns.Add().Field(e => e.Name).Width(100);
columns.Add().Field(e => e.Level).Width(26);
columns.Add().Width(100).Command(c =>
{
c.CreateChild().Text("Add child");
c.Edit();
c.Destroy();
})
.HtmlAttributes(new {style = "text-align: center;"});
})
.Editable()
.Sortable()
.Filterable()
.DataSource(dataSource => dataSource
.Create(create => create.Action("Create", "OrgStructure"))
.Read(read => read.Action("All", "OrgStructure").Data("treelistParam"))
.Update(update => update.Action("Update", "OrgStructure"))
.Destroy(delete => delete.Action("Destroy", "OrgStructure"))
.ServerOperation(false)
.Model(m =>
{
m.Id(f => f.NodeId);
m.ParentId(f => f.ParentNodeId).DefaultValue(sessionUser.DepartmentId);
m.Field(f => f.FiscalYear).DefaultValue(sessionUser.CurrentFiscalYearId);
m.Field(f => f.CreatedDateTime);
m.Field(f => f.DepartmentCode);
m.Field(f => f.Acronym);
m.Field(f => f.DepartmentId).DefaultValue(sessionUser.DepartmentId);
m.Field(f => f.RequiresChildSelect);
m.Expanded(false);
m.Field(f => f.Name);
m.Field(f => f.Level).Editable(false);
m.Field(f => f.LevelName).Editable(false);
m.Field(f => f.ParentNodeId);
})
)
.Height(505)
.Events(events =>
{
events.FilterMenuOpen("onFilterMenuOpen");
events.DataBound("dataBound");
events.DataBinding("dataBinding");
events.Save("onSave");
events.Remove("saveExpandState");
events.Cancel("onCancel");
})
)
点击add child
时,触发onSave
javascript函数:
function onSave() {
}
我相信我们需要 Ajax,但是在 treelist
控件已经处理 ajax post 的情况下如何实现它,但是我们需要自定义 postback?
我需要在不重新加载的情况下显示错误,treelist
控件在数据源中有一个错误处理程序 .Events(ev=>ev.Error("onError"))
:
.DataSource(dataSource => dataSource
.Create(create => create.Action("Create", "OrgStructure"))
.Read(read => read.Action("All", "OrgStructure").Data("treelistParam"))
.Update(update => update.Action("Update", "OrgStructure"))
.Destroy(delete => delete.Action("Destroy", "OrgStructure"))
.Events(ev=>ev.Error("onError"))
.ServerOperation(false)
.Model(m =>
{
m.Id(f => f.NodeId);
m.ParentId(f => f.ParentNodeId).DefaultValue(sessionUser.DepartmentId);
m.Field(f => f.FiscalYear).DefaultValue(sessionUser.CurrentFiscalYearId);
m.Field(f => f.CreatedDateTime);
m.Field(f => f.DepartmentCode);
m.Field(f => f.Acronym);
m.Field(f => f.DepartmentId).DefaultValue(sessionUser.DepartmentId);
m.Field(f => f.RequiresChildSelect);
m.Expanded(false);
m.Field(f => f.Name);
m.Field(f => f.Level).Editable(false);
m.Field(f => f.LevelName).Editable(false);
m.Field(f => f.ParentNodeId);
})
)