Ajax Results Div隐藏到结果

时间:2019-01-02 15:49:44

标签: ajax asp.net-mvc

我有一个正常工作的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> }的东西?

我怀疑只能在View中解决此问题,但出于完整性考虑,我在下面包括了我的Controller代码:

[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 :(得分:0)

您可以使用html创建局部视图调用_alert

<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" }))

希望有帮助。