我有以下问题:验证完成后,我想返回部分视图,这也返回但不显示为模式对话框。该页面仅获得一种灰色过滤器,例如显示模态对话框。
我还通过网络监视器使用 Google chrome 对其进行了测试,响应回来了,但它没有显示为模式对话框。这是响应的屏幕截图:
主视图(这里我加载局部视图并通过单击按钮运行它):
@await Html.PartialAsync("_AddNewSettingsModal", new FullLearnProjekt.Models.DB_Models.UserGutscheinSettings())
局部视图(模态):
@model FullLearnProjekt.Models.DB_Models.UserGutscheinSettings
<form id="newSettingsModalForm" method="post" asp-action="AddNewEinstellung" data-ajax="true" data-ajax-update="#newSettingsModalForm" data-ajax-model="replace">
<div class="modal fade" id="newSettingsModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="exampleModalLabel">Neue Gutscheinvorlage erstellen</h5>
</div>
<div class="modal-body">
<div class="row">
<div class="col-xl-12 col-lg-12 col-md-8 mt-md-0 mt-4">
<div class="form">
<div class="row">
<div class="col-md-6 mx-auto">
<div class="form-group">
<label asp-for="GutscheinName">Gutscheinbezeichnung</label>
<input asp-for="GutscheinName" type="text" class="form-control mb-4" id="gutscheinName" placeholder="Gutscheinname z.B. 20% Nachlass ab 5€ Bestellung" value="GutscheinName">
<span asp-validation-for="GutscheinName" class="text-danger"></span>
</div>
</div>
<div class="col-md-6 mx-auto">
<div class="form-group">
<label asp-for="GutscheinGültigInTagen">Gutscheinfrist in Tagen</label>
<input asp-for="GutscheinGültigInTagen" type="text" class="form-control mb-4" id="gutscheinFrist" placeholder="30">
<span asp-validation-for="GutscheinGültigInTagen" class="text-danger"></span>
</div>
</div>
</div>
<div class="row">
<div class="col-md-6 mx-auto">
<div class="form-group">
<label asp-for="EinstellungenVon" class="dob-input">Aktiv ab</label>
<input asp-for="EinstellungenVon" class="form-control datepicker" id="einstellungenVon">
<span asp-validation-for="EinstellungenVon" class="text-danger"></span>
</div>
</div>
<div class="col-md-6 mx-auto">
<div class="form-group">
<label asp-for="EinstellungenBis" class="dob-input">Aktiv bis</label>
<input asp-for="EinstellungenBis" class="form-control datepicker" id="einstellungenBis">
<span asp-validation-for="EinstellungenBis" class="text-danger"></span>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="info">
<div style="height:20px"></div>
<h4 class="">Gutschein Nachricht</h4>
<div class="row">
<div class="col-md-12 mx-auto">
<div class="form-group" id="gutscheinTextContainer">
<h6 for="gutscheinText" style="margin-bottom: 5px">Platzhalter: </h6>
<label style="font-size:15px" class="btn btn-outline-primary btn-rounded mb-2">{Nutzername}</label>
<label style="font-size:15px" class="btn btn-outline-primary btn-rounded mb-2">{Ablaufdatum}</label>
<label style="font-size:15px" class="btn btn-outline-primary btn-rounded mb-2">{PIN}</label>
<textarea asp-for="GutscheinText" class="form-control" id="gutscheinText" style="margin-top: 15px" placeholder="Diese Nachricht erhält Ihr Kunde im Zusammenhang mit dem Gutschein" rows="10">Hey {Kundenname}, danke für deinen Besuch! Wie versprochen bekommst du hier deinen Gutschein für ne Wurst</textarea>
<span asp-validation-for="GutscheinText" class="text-danger"></span>
</div>
</div>
</div>
</div>
<div class="modal-footer">
<button type="submit" class="btn btn-primary">Aktivieren</button>
<button class="btn" data-dismiss="modal"><i class="flaticon-cancel-12"></i> Abbrechen</button>
</div>
</div>
</div>
</div>
</form>
控制器:
[HttpPost]
[ValidateAntiForgeryToken]
public async Task <IActionResult> AddNewEinstellung(UserGutscheinSettings newSettings)
{
if (ModelState.IsValid)
{
var user = await usermanager.GetUserAsync(User);
var einstellung = new UserGutscheinSettings { Aussteller = user, GutscheinGültigInTagen = newSettings.GutscheinGültigInTagen, GutscheinText = newSettings.GutscheinText, EinstellungenVon = newSettings.EinstellungenVon, EinstellungenBis = newSettings.EinstellungenBis, GutscheinName = newSettings.GutscheinName };
context.Add(einstellung);
context.SaveChanges();
History history = new History { Aussteller = user, HistoryText = "Einstellung ,," + newSettings.GutscheinName + "´´ wurde erstellt", Type = HistoryType.userAction, ActionTime = DateTime.Now };
dbService.AddHistoryRecord(history);
return RedirectToAction(nameof(GutscheinEinstellungen));
}
return PartialView("_AddNewSettingsModal",newSettings);
}
数据模型:
public class UserGutscheinSettings
{
public UserGutscheinSettings() { }
public int ID { get; set; }
public ApplicationUser Aussteller { get; set; }
[Required]
[StringLength(30,MinimumLength = 2)]
public string GutscheinName { get; set; }
[Required]
[Range(1,1095)]
public int GutscheinGültigInTagen { get; set; }
[Required]
[GutscheinTextValidationAttribute]
public string GutscheinText { get; set; }
[Required]
public DateTime EinstellungenVon { get; set; }
[Required]
public DateTime EinstellungenBis { get; set; }
public bool EinstellungAktiv { get; set; }
}
自定义验证:
public class GutscheinTextValidationAttribute : ValidationAttribute
{
public string GetErrorMessagePlatzhalter() => $"{PlatzerDieFehlen} muss vorhanden sein";
public string GetErrorMessageDatatype() => $"Falsches Format";
public string PlatzerDieFehlen { get; set; }
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
if (value is string)
{
var gutscheinText = (string)value;
PlatzerDieFehlen = string.Empty;
if (!gutscheinText.Contains("{Nutzername}"))
{
PlatzerDieFehlen += "{Nutzername}, ";
}
if (!gutscheinText.Contains("{Ablaufdatum}"))
{
PlatzerDieFehlen += "{Ablaufdatum}, ";
}
if (!gutscheinText.Contains("{PIN}"))
{
PlatzerDieFehlen += "{PIN}, ";
}
if (PlatzerDieFehlen.Length > 1)
{
return new ValidationResult(GetErrorMessagePlatzhalter());
}
else
{
return ValidationResult.Success;
}
}
return new ValidationResult(GetErrorMessageDatatype());
}
}
我真的搜索了很长时间,但我找不到解决方案。有人知道如何解决这个问题吗?