2015-05-06 52 views
2

我使用smoothscroll导航,就像这样:后提交重定向到同一页

<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("[email protected]")); //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("[email protected]")); //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

但是联系的网址是: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> 

这是我家的控制器:

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("[email protected]")); //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); 
     } 
    } 

看来,如果我用这个:返回重定向(Url.RouteUrl( “家”)+ “#contact”);锚(#)将被跳过

+0

Replace return View(model);使用视图(“ViewName”,模型); –

+0

'return View(model);'确实返回到相同的视图。当然URL是'/ Home/contact'你期望/想要它是什么? –

+0

嗨PM谢谢你的answare,我更新了我的帖子 – InfinityGoesAround

回答

1

而不是返回视图,返回重定向:

return RedirectToAction("Index"); 

正如你也想跳到页面上的一个锚,你可以使用以下命令:

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

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

+0

Hi Richard,这样更好,但是现在它重定向到页面顶部(索引),并且它回到了联系人(页面底部)部分索引 – InfinityGoesAround

+0

已更新为包含跳转到#contact – Richard

+0

我试过了,但它仍然跳转到索引的顶部。 sumbit之后的url也是:http:// localhost:53534 /,所以它跳过#contact – InfinityGoesAround