0

我有以下问题:验证完成后,我想返回部分视图,这也返回但不显示为模式对话框。该页面仅获得一种灰色过滤器,例如显示模态对话框。

这是验证发生之前模态对话框的屏幕截图: 验证前的截图

在我按下 ,,Aktivieren" 后,会发生以下情况: 验证后的截图

我还通过网络监视器使用 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());
    }
}

我真的搜索了很长时间,但我找不到解决方案。有人知道如何解决这个问题吗?

4

0 回答 0