[英]MVC render partial view foreach inside a popup modal in another view
[英]How can I render a partial view error modal into another view from a MVC controller?
如果在调用 SaveDailyCriteria 操作后需要向用户显示问题或错误,我希望出现此错误模式窗口。 我需要在调用 SaveDailyCriteria 的视图中呈现局部视图。 使用我目前在下面的代码, return PartialView("_ErrorsModal", notification)
被调用但从未显示在我的主视图上。
控制器
[HttpPost]
public ActionResult SaveDailyCriteria(Daily report, string EnteredCriteriaName)
{
var criteria = report.ConvertToCriteria(report);
criteria.CriteriaName = EnteredCriteriaName;
var dr = new ReportDaily();
var nameExists = dr.DoesCriteriaNameAlreadyExist(criteria);
if (dr.SaveReportCriteria(criteria, nameExists, out Notification notification) == false)
{
return PartialView("_ErrorsModal", notification);
}
else {
return View(report);
}
}
主视图
@model Company.Areas.Reports.Models.Daily
@using Company.TaxCollection.Reports;
@{
ViewData["Title"] = "Daily Report";
}
<h1>@ViewData["Title"]</h1>
<br />
@using (Html.BeginForm("DailySubmit", "Reports", FormMethod.Post, new { id = "reportForm", @class = "report-form col-9" }))
{
...
...
<div id="saveModal" class="modal fade" role="dialog">
<div class="modal-dialog">
<!-- Modal content-->
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title float-left">Save Criteria</h4>
<button type="button" class="close" data-dismiss="modal"></button>
</div>
<div class="modal-body">
<label>Enter the name to save as:</label><input type="text" id="savedReportName" name="EnteredCriteriaName" class="form-control" />
</div>
<div class="modal-footer">
<button type="button" class="btn btn-primary" id="saveSubmit" data-dismiss="modal">Save</button>
</div>
</div>
</div>
</div>
}
<script>
$(document).ready(function () {
var dataType = 'application/x-www-form-urlencoded; charset=utf-8';
$(function () {
$('#saveSubmit').on('click', function (evt) {
var data = $('form').serialize();
//Ajax form post
$.ajax({
type: 'POST',
data: data,
contentType: dataType,
url: '@Url.Action("SaveDailyCriteria", "Reports")',
success: function (data) {
console.log(data);
if (data.success) {
//window.location.href = data;
} else {
//window.location.href = data;
}
}
});
});
});
});
</script>
_ErrorsModal 局部视图
@model Company.NotificationPattern.Notification
<!-- Modal -->
<div id="errorsModal" class="modal fade" role="dialog">
<div class="modal-dialog">
<!-- Modal content-->
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title float-left">Warning</h4>
<button type="button" class="close" data-dismiss="modal"></button>
</div>
<div class="modal-body">
@if (Model.HasErrors || Model.HasWarnings) {
<p>@Model.GetConcatenatedErrorMessage(Environment.NewLine + Environment.NewLine)</p>
}
</div>
<div class="modal-footer">
<button type="button" id="modalConfirm" class="btn btn-primary" data-dismiss="modal">OK</button>
</div>
</div>
</div>
</div>
您可以通过多种方式实现这一点,一种选择:
在您的情况下,传递时返回的 json 将指示要重定向到的视图的 url(不是视图本身,否则无法知道它是新视图还是部分错误)。 例如
if (save() == false)
{
return PartialView("_ErrorsModal", notification);
}
else {
return Json({
success = true,
url = this.Url.Action("SaveDailyCriteria", new { reportId = report.ReportId }
});
}
和你的 javascript 到:
$.ajax({
type: 'POST',
...
success: function (data) {
if (data.success)
window.location.href = data.url;
else
$("#modalId").html(data);
}
});
另一种方法是始终返回 json,但将控制器中的 _ErrorsModal(出错时)或 View(成功时)呈现为一个字符串,并将该字符串添加为 json 属性。 IMO 最好让 MVC 管道处理 HTML 渲染,因此推荐上述方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.