2016-04-15 18 views
0

Ich arbeite derzeit an einer Website in MVC, am unteren Rand meiner Fußzeile habe ich eine Textbox mit einem Knopf, um Newsletter zu abonnieren. Ich habe eine Teilansicht für dieses Textfeld & Schaltfläche erstellt. Ich versuche zu erreichen, wenn ich auf den Submit-Button klicke, um sofort zur HttpPost zu gelangen und den HttpGet zu überspringen.MVC Teilansicht geht nicht in HttpPost

NewsletterController:

[HttpPost] 
    public ActionResult AddNewsletterEmail(string email) 
    { 
     // Logic 
    } 

NewsletterModel:

[Key] 
    public int EmailID { get; set; } 

    [Required] 
    public string Email { get; set; } 

_Layout.cshml:

<div class="subs-social-options"> 
        <div class="row custom-row-footer"> 
         <div class="col-md-6 custom-col-options"> 
           @Html.Partial("~/Views/Newslett/AddNewsletterEmail.cshtml"); 
         </div> 
         <div class="col-md-6"> 
          <div class="right-side"> 
           <div class="widget widget-footer social-icons"> 
            <h2>Get Social with Us</h2> 
            <ul> 
             <li><a href="https://www.facebook.com/" target="_blank"><i class="fa fa-facebook"></i></a></li> 
             <li><a href="https://www.twitter.com/" target="_blank"><i class="fa fa-twitter"></i></a></li> 
             <li><a href="https://www.linkedin.com/" target="_blank"><i class="fa fa-linkedin"></i></a></li> 
             <li><a href="https://plus.google.com/" target="_blank"><i class="fa fa-google-plus"></i></a></li> 
             <li><a href="https://www.youtube.com/" target="_blank"><i class="fa fa-youtube-play"></i></a></li> 
             <li><a href="https://www.flickr.com/" target="_blank"><i class="fa fa-flickr"></i></a></li> 
            </ul> 
           </div> 
          </div> 
         </div> 
        </div> 
       </div> 

AddNewsletterEmail.cshtml (Teilansicht):

@using (Ajax.BeginForm("AddNewsletterEmail", "NewsletterController", new AjaxOptions() { UpdateTargetId = "email", HttpMethod = "Post"})) 
{ 
    <div class="left-side"> 
     <div class="widget widget-footer news-letter-signup"> 
      <form class="subs-form"> 
       <div class="email-field"> 
        @Html.TextBoxFor(model => model.Email, new { placeholder = "Enter you email address" }) 
        <button type="submit"><i class="fa fa-paper-plane-o"></i></button> 
       </div> 
      </form> 
     </div> 
    </div> 
} 

Ich habe seit Runden Stunden nach einer Lösung und der nichts funktionierte noch, so dass jede Hilfe sehr geschätzt wird. Vielen Dank für Ihre Zeit!

Grüße, Vexena

+0

Der Code, den Sie angezeigt haben, funktioniert einwandfrei. Was ist das Problem, das du hast? –

+0

Jetzt, als ich auf den Submit-Button in der Teilansicht geklickt habe, scheint es zuerst zu HttpGet zu gehen, was nicht das ist, was ich möchte. Ich würde den String aus der Textboxeingabe in die Datenbank mit dem HttpPost setzen, so dass die Ansicht tesame – Vexena

+0

bleibt Der Code, den Sie angezeigt haben, wird zur POST-Methode weitergeleitet. Wenn es nicht ist, schlägt es vor, dass Sie verschachtelte Formulare in Ihrer Ansicht haben (die ungültig ist) –

Antwort

0

Lösung:

@using (Ajax.BeginForm("AddNewsletterEmail", "Newsletter", new AjaxOptions() { UpdateTargetId = "email", HttpMethod = "Post"})) 

Alles, was ich war Änderung NewsletterController Newsletter, um zu tun hatte, um es zu beheben (ich glaube, Ajax.BeginForm bereits Controller-anhängt an die angegebene Überlastung ?) Korrigiere mich, ich liege falsch.

Besonderer Dank an Nataraj von asp.net forum!

+2

'Ajax.Beginform()' fügt "Controller" nicht an. Die Konvention in MVC besteht darin, auf einen Controller mit dem Namen 'XYZController' zuzugreifen, den Sie' 'XYZ'' verwenden. Dies gilt überall in MVC, zum Beispiel bei Verwendung von 'Html.BeginForm()', 'Url.Action()', 'Html.Action()' und allen Methoden, die einen Controller-Namen akzeptieren. –