【问题标题】:after submit redirect to the same page提交后重定向到同一页面
【发布时间】:2015-05-06 12:41:52
【问题描述】:

我正在使用平滑滚动导航,如下所示:

 <li><a href="#home" class="smoothScroll">HOME</a></li>

我有一个联系表格,如下所示:

<section id="contact" class="text-center">




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

        <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">
                        @Html.LabelFor(m => m.FromName, new { @class = "col-md-3" })
                        <div class="col-md-10">
                            @Html.TextBoxFor(m => m.FromName, new { @class = "form-control" })
                            @Html.ValidationMessageFor(m => m.FromName)
                        </div>
                    </div>
                    <div class="form-group">
                        @Html.LabelFor(m => m.FromEmail, new { @class = "col-md-3 control-label" })
                        <div class="col-md-10">
                            @Html.TextBoxFor(m => m.FromEmail, new { @class = "form-control" })
                            @Html.ValidationMessageFor(m => m.FromEmail)
                        </div>
                    </div>
                    <div class="form-group">
                        @Html.LabelFor(m => m.Message, new { @class = "col-md-3 control-label" })
                        <div class="col-md-10">
                            @Html.TextAreaFor(m => m.Message, new { @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>

这是联系方式:

public ActionResult Contact()
        {
            ViewBag.Message = "Your contact page.";

            return View();
        }

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


                    message2 = "Thanks! We'll get back to you soon.";
                    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 = "Your email subject";
                    message.Body = string.Format(body, model.FromName, model.FromEmail, model.Message);
                    message.IsBodyHtml = true;

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

                    }



                }
                catch (Exception error)
                {
                    Response.Write("Error sending email: " + error.Message + "<br /> StackTrace: " + error.StackTrace);
                }
                ViewBag.Message = "Thank you for contact us";
                //return new RedirectToActionAnchor("Contact", "", "#contact");

            }

            //if (Request.IsAjaxRequest())
            //{
            //    return new JsonResult { Data = new { success = true, message = message2 } };
            //}

            //TempData["Message"] = message2;


            return View(model);
        }

但是提交后如何返回联系表单,因为提交后url变成了:

http://localhost:53534/Home/contact

谢谢

我现在是这样的:

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


                    message2 = "Thanks! We'll get back to you soon.";
                    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 = "Your email subject";
                    message.Body = string.Format(body, model.FromName, model.FromEmail, model.Message);
                    message.IsBodyHtml = true;

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

                    }



                }
                catch (Exception error)
                {
                    Response.Write("Error sending email: " + error.Message + "<br /> StackTrace: " + error.StackTrace);
                }
                ViewBag.Message = "Thank you for contact us";
                //return new RedirectToActionAnchor("Contact", "", "#contact");

            }

            //if (Request.IsAjaxRequest())
            //{
            //    return new JsonResult { Data = new { success = true, message = message2 } };
            //}

            //TempData["Message"] = message2;


            return View("Contact",model);
        }

但问题是它随后转到:http://localhost:53534/Home/contact

但是Contact的Url是:http://localhost:53534/#contact

这是我的导航:

<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>

这是我的 Home 控制器:

public class HomeController : Controller
    {
        public ActionResult Index()
        {
            ViewBag.Message = "Modify this template to jump-start your ASP.NET MVC application.";

            return View();
        }

        public ActionResult About()
        {
            ViewBag.Message = "Your app description page.";

            return View();
        }



        public ActionResult Contact()
        {
            ViewBag.Message = "Your contact page.";

            return View();
        }

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


                    message2 = "Thanks! We'll get back to you soon.";
                    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 = "Your email subject";
                    message.Body = string.Format(body, model.FromName, model.FromEmail, model.Message);
                    message.IsBodyHtml = true;

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

                    }



                }
                catch (Exception error)
                {
                    Response.Write("Error sending email: " + error.Message + "<br /> StackTrace: " + error.StackTrace);
                }
                ViewBag.Message = "Thank you for contact us";
                //return new RedirectToActionAnchor("Contact", "", "#contact");

            }

            //if (Request.IsAjaxRequest())
            //{
            //    return new JsonResult { Data = new { success = true, message = message2 } };
            //}

            //TempData["Message"] = message2;


            return View("Home",model);
        }
    }

似乎如果我使用这个:return Redirect(Url.RouteUrl("Home") + "#contact");锚点(#)将被跳过

【问题讨论】:

  • 替换返回视图(模型);带视图("ViewName",model);
  • return View(model); 确实返回到相同的视图。当然,网址是 /Home/contact 您期望/希望它是什么?
  • 你好 PM 谢谢你的回答,我更新了我的帖子

标签: c# asp.net-mvc-4 razorengine


【解决方案1】:

返回一个重定向而不是返回一个视图:

return RedirectToAction("Index");

由于您还想跳转到页面上的锚点,您可以使用以下内容:

return Redirect(Url.RouteUrl("Index") + "#contact");

这是Post-Redirect-Get 模式,可确保您不能重复提交操作。但是,在这种情况下,您将丢失 ViewBag.Message 中的信息。

【讨论】:

  • 嗨,Richard,这更好,但现在它重定向到页面顶部(索引),它不会回到索引的联系人(页面底部)部分
  • 更新包括跳转到#contact
  • 我试过了,但它仍然跳到索引的顶部。 sumbit 后的 url 也是:localhost:53534,所以跳过了#contact
  • 嗨,Richard,我收到此错误:在路由集合中找不到名为“Home”的路由。参数名称:name 说明:当前web请求执行过程中发生了未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。异常详细信息:System.ArgumentException:在路由集合中找不到名为“Home”的路由。参数名称:name 源错误:第 134 行:第 135 行:第 136 行:return Redirect(Url.RouteUrl("Home") + "#contact");第 137 行:} 第 138 行:}
  • 嗨,Richard,每次锚点(#) 提交后,url 都会跳过
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-09
  • 1970-01-01
  • 1970-01-01
  • 2017-06-26
相关资源
最近更新 更多