Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 验证不可见_C#_Asp.net Mvc 4 - Fatal编程技术网

C# 验证不可见

C# 验证不可见,c#,asp.net-mvc-4,C#,Asp.net Mvc 4,我有一个联系表格,用户可以联系我。它是用asp.NETMVC编写的,但问题是在提交后没有填写任何文本框,文本框上没有验证 这是我的表格: @using (Html.BeginForm("contact","Home", FormMethod.Post, new { @enctype = "multipart/form-data" })) { @Html.AntiForgeryToken() @Html.ValidationSummary(t

我有一个联系表格,用户可以联系我。它是用asp.NETMVC编写的,但问题是在提交后没有填写任何文本框,文本框上没有验证

这是我的表格:

@using (Html.BeginForm("contact","Home", FormMethod.Post, new { @enctype = "multipart/form-data" }))
    {
        @Html.AntiForgeryToken()        
        @Html.ValidationSummary(true)

        <section id="contact" class="text-center">
            <div class="container">
                <div class="row">
                    <div class="col-md-12 wow fadeInDown" data-wow-delay="2000">
                        <h3>CONTACT Microrout.nl</h3>
                    </div>
                    <div class="col-md-2"></div>
                    <div class="col-md-8">

                        Microrout.nl
                        <br />frederik hendriklaan 253-b
                        <br />Den Haag
                        <br />0641697144


                    </div>
                    <div class="col-md-2"></div>
                    <hr />
                    <div class="form-group">

                        <div class="col-md-10">
                            @Html.TextBoxFor(m => m.FromName, new {placeholder = "Your Name", @class = "form-control" })
                            @Html.ValidationMessageFor(m => m.FromName)
                        </div>
                    </div>

                    <div class="form-group">

                        <div class="col-md-10">
                            @Html.TextBoxFor(m => m.subject, new {placeholder = "Subject of message", @class = "form-control" })
                            @Html.ValidationMessageFor(m => m.subject)
                        </div>
                    </div>

                    <div class="form-group">

                        <div class="col-md-10">
                            @Html.TextBoxFor(m => m.FromEmail, new {placeholder ="Your email", @class = "form-control" })
                            @Html.ValidationMessageFor(m => m.FromEmail)
                        </div>
                    </div>
                    <div class="form-group">

                        <div class="col-md-10">
                            @Html.TextAreaFor(m => m.Message, new {placeholder = "Your message", @class = "form-control" })
                            @Html.ValidationMessageFor(m => m.Message)
                        </div>
                    </div>
                    <div class="form-group">
                        <div class="col-md-3">
                            <input type="submit" value="SHOOT MESSAGE" class="form-control">
                        </div>
                    </div>
                </div>
            </div>
            @*<div class="google_map">
                    <div id="map-canvas"></div>
                </div>*@


        </section>
    }






</section>
我正在使用smoothScroll导航,如下所示:

public ActionResult Contact()
        {
            EmailFormModel model = TempData["EmailFormModel"] as EmailFormModel; 
            ViewBag.Message = "Your contact page.";


            return View();
        }

[HttpPost]
        [ValidateAntiForgeryToken]
        public async Task<ActionResult> Contact(EmailFormModel model)
        {
            TempData["EmailFormModel"] = model;
            string message2 = "There are a few errors";
            if (ModelState.IsValid)
            {




                var body = "<p>Email From: {0} ({1})</p><p>Message:</p><p>{2}</p>";
                var message = new MailMessage();
                message.To.Add(new MailAddress("nengelen@online.nl")); //replace with valid value
                message.Subject = model.subject;
                message.Body = string.Format(body, model.FromName, model.FromEmail, model.Message);
                message.IsBodyHtml = true;

                using (var smtp = new SmtpClient())
                {
                    await smtp.SendMailAsync(message);

                }

                return new RedirectResult(Url.Action("") + "#contact");
            }

            if (Request.IsAjaxRequest())
            {
                return new JsonResult { Data = new { succes = true, message = message2 } };
            }
            TempData["Message"] = message2;
            return View(model);

        }
<div class="collapse navbar-collapse">
                        <ul class="nav navbar-nav navbar-right">
                            <li><a href="#home" class="smoothScroll">HOME</a></li>
                            <li><a href="#about" class="smoothScroll">STUDIO</a></li>
                            <li><a href="#team" class="smoothScroll">TEAM</a></li>
                            <li><a href="#service" class="smoothScroll">SERVICES</a></li>
                            <li><a href="#work" class="smoothScroll">WORK</a></li>
                            <li><a href="#pricing" class="smoothScroll">PRICING</a></li>
                            <li><a href="#contact" class="smoothScroll">CONTACT</a></li>
                            @*<li>@Html.ActionLink("Contact", "Contact", "Home")
                            </li>*@
                        </ul>
                    </div>
[HttpGet]
        public ActionResult Contact(string uniqueUri)
        {
            EmailFormModel model = TempData["EmailFormModel"] as EmailFormModel;
            //ViewBag.Message = "Your contact page.";


            return View(model);
        }

        [HttpPost]
        [ValidateAntiForgeryToken]
        public async Task<ActionResult> Contact(EmailFormModel model)
        {
            TempData["EmailFormModel"] = model;
            string message2 = "There are a few errors";
            if (ModelState.IsValid)
            {
                var body = "<p>Email From: {0} ({1})</p><p>Message:</p><p>{2}</p>";
                var message = new MailMessage();
                message.To.Add(new MailAddress("nengelen@online.nl")); //replace with valid value
                message.Subject = model.subject;
                message.Body = string.Format(body, model.FromName, model.FromEmail, model.Message);
                message.IsBodyHtml = true;

                using (var smtp = new SmtpClient())
                {
                    await smtp.SendMailAsync(message);

                }

                return new RedirectResult(Url.Action("") + "#contact");
            }
            else
            {
                ModelState.AddModelError("ReviewErrors", "some error occured");
                //return RedirectToAction("Create", new { uniqueUri = Request.RequestContext.RouteData.Values["uniqueUri"] });
                return new RedirectResult(Url.Action("") + "#contact");
            }


        }
        public ActionResult Contact()
        {
            EmailFormModel model = TempData["EmailFormModel"] == null ? new EmailFormModel() : (EmailFormModel)TempData["EmailFormModel"];
            ViewBag.Message = "Your contact page.";
            return View(model);



        }

        [HttpPost]
        [ValidateAntiForgeryToken]
        public async Task<ActionResult> Contact(EmailFormModel model)
        {
            TempData["EmailFormModel"] = model;
            string message2 = "There are a few errors";
            if (ModelState.IsValid)
            {
                var body = "<p>Email From: {0} ({1})</p><p>Message:</p><p>{2}</p>";
                var message = new MailMessage();
                message.To.Add(new MailAddress("nengelen@online.nl")); //replace with valid value
                message.Subject = model.subject;
                message.Body = string.Format(body, model.FromName, model.FromEmail, model.Message);
                message.IsBodyHtml = true;

                using (var smtp = new SmtpClient())
                {
                    await smtp.SendMailAsync(message);

                }

                return new RedirectResult(Url.Action("") + "#contact");
            }
            else
            {
                ModelState.AddModelError("ReviewErrors", "some error occured");
                //return RedirectToAction("Create", new { uniqueUri = Request.RequestContext.RouteData.Values["uniqueUri"] });
                return new RedirectResult(Url.Action("") + "#contact");
            }


        }
但验证是不可见的

谢谢大家的努力。但我刚刚创建了一个新的联系人页面,现在它可以正常工作了。只是要弄清楚,在导航中有正确的链接,但我刚刚提出了一个新问题。我刚刚将DaWood标记为最佳解决方案,因为作为answare,您无法进行多次标记

谢谢大家

您丢失了:

if (!ModelState.IsValid)
{
    return View(model);
}
您需要渲染带有问题的视图。然后,框架将拾取验证错误并显示它们。

之后

if(ModelState.IsValid)
您的电话是:

 return new RedirectResult(Url.Action("") + "#contact");
刷新页面并清除模型状态

如果您需要调用重定向结果,请点击此链接

您需要返回
视图(模型)
以获取验证错误

if(ModelState.IsValid)
{
 // ...........Other Code:
 return new RedirectResult(Url.Action("") + "#contact");
}
if (Request.IsAjaxRequest())
{
return new JsonResult { Data = new { success = true, message = message2 } };
}

TempData["Message"] = message2;    
return View(model);
编辑:

public ActionResult Contact()
{
  EmailFormModel model = TempData["EmailFormModel"] == null ? new EmailFormModel() : (EmailFormModel) TempData["EmailFormModel"]; 
  ViewBag.Message = "Your contact page.";
  return View(model);
}

当模型状态无效时,需要添加else。并将您的返回移动到if中,以便当模型状态有效时,您返回到模型的肯定检查中。当模型状态无效时,将返回视图,这将保留模型状态数据

if (ModelState.IsValid)
        {
                var body = "<p>Email From: {0} ({1})</p><p>Message:</p><p>{2}</p>";
                var message = new MailMessage();
                message.To.Add(new MailAddress("nengelen@online.nl")); //replace with valid value
                message.Subject = model.subject;
                message.Body = string.Format(body, model.FromName, model.FromEmail, model.Message);
                message.IsBodyHtml = true;

                using (var smtp = new SmtpClient())
                {
                    await smtp.SendMailAsync(message);

                }

                message2 = "Thanks! We'll get back to you soon.";






                //Response.Write("Error sending email: " + error.Message + "<br /> StackTrace: " + error.StackTrace);

            //ViewBag.Message = "Thank you for contact us";
            //return new RedirectToActionAnchor("Contact", "", "#contact");
            TempData["Message"] = message2;
        if (Request.IsAjaxRequest())
        {
            return new JsonResult { Data = new { success = true, message = message2 } };
        }

            return new RedirectResult(Url.Action("") + "#contact");
        }
        else
        {
            return View();
        }
if(ModelState.IsValid)
{
var body=“电子邮件发件人:{0}({1})

消息:

{2}

”; var message=new MailMessage(); message.To.Add(新邮件地址(“nengelen@online.nl“”);//替换为有效值 message.Subject=model.Subject; message.Body=string.Format(Body,model.FromName,model.FromEmail,model.message); message.IsBodyHtml=true; 使用(var smtp=new SmtpClient()) { 等待smtp.SendMailAsync(消息); } message2=“谢谢!我们很快会回复您的。”; //响应。写入(“发送电子邮件时出错:+Error.Message+”
StackTrace:+Error.StackTrace); //ViewBag.Message=“感谢您与我们联系”; //返回新的RedirectToActionAnchor(“联系人”、“联系人”); TempData[“Message”]=message2; if(Request.IsAjaxRequest()) { 返回新的JsonResult{Data=new{success=true,message=message2}; } 返回新的重定向结果(Url.Action(“”+“#contact”); } 其他的 { 返回视图(); }

此外,如果模型无效,您可能希望启用内置客户端验证以保存到服务器的往返过程

您的if(Request.IsAjaxRequest())将永远不会被执行,但现在if()将不会被称为doops。编辑了我的回答Hi Truk,感谢您的编辑,但这里也有一个问题:return View()转到:,但是联系人的链接是:您只想返回帖子所来自的视图,以便用户可以看到验证消息。将
视图()
保留为空将返回与您所处的控制器操作同名的视图。如果要调用特定视图,可以显式地调用它,例如
返回视图(“此处的视图名称”)
。此时,您不希望调用控制器操作,只返回带有错误消息的视图。如果调用该操作,它将返回一个不包含错误消息的新视图。昨天也有同样的问题,解决方案是,如果渲染时不使用If(!ModelState.IsValid),则加载初始值。好吧,我试过了。但是验证仍然不可见,如果(!modelState.IsValid),我会把它放在哪里?那之后呢?如果(ModelState.IsValid){}?问题是我不能返回视图(模型),因为联系人的url是:应该位于控制器操作方法的最顶端。不确定它在url段中的行为如何在POST方法中有什么
if(Request.IsAjaxRequest())
?您是使用ajax提交表单(在这种情况下不会显示任何验证错误)还是进行正常提交?在提交建议不用于扩展讨论之后,它似乎正在进行完整的发布;这段对话已经结束。
if(ModelState.IsValid)
{
 // ...........Other Code:
 return new RedirectResult(Url.Action("") + "#contact");
}
if (Request.IsAjaxRequest())
{
return new JsonResult { Data = new { success = true, message = message2 } };
}

TempData["Message"] = message2;    
return View(model);
public ActionResult Contact()
{
  EmailFormModel model = TempData["EmailFormModel"] == null ? new EmailFormModel() : (EmailFormModel) TempData["EmailFormModel"]; 
  ViewBag.Message = "Your contact page.";
  return View(model);
}
if (ModelState.IsValid)
        {
                var body = "<p>Email From: {0} ({1})</p><p>Message:</p><p>{2}</p>";
                var message = new MailMessage();
                message.To.Add(new MailAddress("nengelen@online.nl")); //replace with valid value
                message.Subject = model.subject;
                message.Body = string.Format(body, model.FromName, model.FromEmail, model.Message);
                message.IsBodyHtml = true;

                using (var smtp = new SmtpClient())
                {
                    await smtp.SendMailAsync(message);

                }

                message2 = "Thanks! We'll get back to you soon.";






                //Response.Write("Error sending email: " + error.Message + "<br /> StackTrace: " + error.StackTrace);

            //ViewBag.Message = "Thank you for contact us";
            //return new RedirectToActionAnchor("Contact", "", "#contact");
            TempData["Message"] = message2;
        if (Request.IsAjaxRequest())
        {
            return new JsonResult { Data = new { success = true, message = message2 } };
        }

            return new RedirectResult(Url.Action("") + "#contact");
        }
        else
        {
            return View();
        }