Я пытаюсь выяснить, как лучше всего показать общее сообщение об ошибке, которое может отображаться на всех страницах моего приложения. Представление об ошибке должно отображаться при выполнении запроса POST формы.
Чтобы сделать представление об ошибках доступным везде, я поместил его в _Layout.cshtml, но я не совсем уверен, как показать его при отправке запроса POST из моей формы.
Примечание: решение не должно заставлять страницу обновляться (т.е. должно быть асинхронным).
Сейчас я использую TempData
для хранения и отображения сообщения
Это мой _Layout.cshtml
<!DOCTYPE html>
...
<body>
@if (TempData["SystemError"] != null)
{
<div>@TempData["SystemError"]</div>
}
@RenderSection("BodyFill", false)
@RenderBody()
...
@RenderSection("Scripts", required: false)
</body>
</html>
Это действие моего контроллера:
[HttpPost]
[ValidateAntiForgeryToken]
public IActionResult ShareWorkbook(string emails, string title, string id, string queryBuilderId)
{
var emailStrArr = Regex.Split(emails, Constants.SplitPattern).ToList();
var workbookShareModel = new WorkbookShareModel
{
Id = id,
QueryBuilderId = queryBuilderId,
Title = title,
Emails = emailStrArr
};
// check to see if the 'WorkbookShareModel' is valid (takes into account its property DataAnnotation)
if (TryValidateModel(workbookShareModel))
{
try
{
ShareWorkbook(workbookShareModel);
}
catch (Exception e)
{
//Todo -- Exception handling
TempData["SystemError"] = Res.System_Error_Message;
}
}
// return no content to avoid page refresh
return NoContent();
}
Это форма (это частичное представление, которое загружается в index.cshtml)
@using DNAAnalysisCore.Resources
@model DNAAnalysisCore.Models.WorkbookShareModel
@* Partial view that contains the 'Share Workbook dialog' modal *@
<!-- Modal -->
<div onclick="activateShareButtons()" class="modal fade" id="shareFormModal" role="dialog">
<div class="modal-dialog modal-md">
<!-- Modal content-->
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title">Share Workbook - @Model.Title</h4>
</div>
@using (Html.BeginForm("ShareWorkbook", "Home", FormMethod.Post, new { @id = "partialform" }))
{
<div class="modal-body">
...
<div class="modal-footer">
<button onclick="hideDialog()" type="submit" class="btn btn-primary">Share</button>
<button onclick="activateShareButtons()" id="btnCancelDialog" type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
</div>
}
</div>
</div>
</div>