Результаты Ajax Div скрыты до результата - PullRequest
0 голосов
/ 02 января 2019

У меня есть форма Ajax, которая работает правильно:

 <div class="row">
            <div class="col-sm-8 col-sm-offset-2 alert alert-info" id="result"></div>
            <div class="col-sm-8 col-sm-offset-2">
                <h4>Contact Us</h4>
                @using (Ajax.BeginForm(new AjaxOptions { UpdateTargetId = "result" }))
                {
                    @Html.LabelFor(a=>a.Email)
                    @Html.EditorFor(a => a.Email)
                    @Html.ValidationMessageFor(a => a.Email)

                    @Html.LabelFor(a=>a.Name)
                    @Html.EditorFor(a => a.Name)
                    @Html.ValidationMessageFor(a => a.Name)

                    @Html.LabelFor(a=>a.Phone)
                    @Html.EditorFor(a => a.Phone)
                    @Html.ValidationMessageFor(a => a.Phone)

                    @Html.LabelFor(a=>a.Message)
                    @Html.EditorFor(a => a.Message)
                    @Html.ValidationMessageFor(a => a.Message)
                    <input type="submit" class="btn btn-primary" value="Send Message" />
                }

            </div>

Тем не менее, div результатов, который я бы хотел оформить как предупреждение, всегда отображается по умолчанию. Как сделать так, чтобы он отображался только при наличии внутреннего текста? Есть ли что-то вроде @if(AjaxResult != null) { <div>...</div> }?

Я подозреваю, что это может быть решено только в представлении, но я включаю мой код контроллера ниже для полноты:

[HttpPost]
        public ActionResult Index(ContactUsViewModel model)
        {
            var fromAddress = new MailAddress("X", "X");
            var toAddress = new MailAddress("X", "X");
            string fromPassword = "X";
            string subject = "GN Query";
            string body = model.Message;

            var smtp = new SmtpClient
            {
                Host = "smtp.gmail.com",
                Port = 587,
                EnableSsl = true,
                DeliveryMethod = SmtpDeliveryMethod.Network,
                UseDefaultCredentials = false,
                Credentials = new NetworkCredential(fromAddress.Address, fromPassword)
            };
            using (var message = new MailMessage(fromAddress, toAddress)
            {
                Subject = subject,
                Body = body
            })
            {
                smtp.Send(message);
            }

            return Content("Your message has been received and we will respond within 24-48 hours.", "text/html");
        }

1 Ответ

0 голосов
/ 02 января 2019

Вы можете создать частичный вызов вызова _alert с вашим HTML:

<div class="col-sm-8 col-sm-offset-2 alert alert-info" id="result">
Your message has been received and we will respond within 24-48 hours.
</div>

и затем, по вашему мнению, вы можете установить контейнерный div, в котором он будет отображаться после завершения вызова ajax:

<div id="messageContainer">
</div>

теперь ваше действие должно возвращать это частичное представление, и вы можете иметь логическое значение в своем представлении, чтобы решить, визуализировать или нет:

 @model System.Boolean
 @if(Model)
 {
    <div class="col-sm-8 col-sm-offset-2 alert alert-info" id="result">
       Your message has been received and we will respond within 24-48 hours.
   </div>
 }

действие вашего контроллера решит, была ли операция успешной, и покажет сообщение, или нет:

bool isSuccess = true; // your logic to set this flag
............
............
{
     smtp.Send(message);
}

return PartialView("_alert.cshtml",isSuccess );

и на главном экране вы увидите:

 <div id="messageContainer">
 </div>
 @using (Ajax.BeginForm(new AjaxOptions { UpdateTargetId = "messageContainer" }))

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...