2010-12-01 11 views
0

Ich versuche MVC 3 und Razor aus einem ASP.NET-Hintergrund zu lernen.MVC 3 - Teilansicht zu einem ausgewählten Controller

Ich möchte eine einfache Teilansicht (im freigegebenen Ordner) zu einem bestimmten Controller zu veröffentlichen, so dass ich es anderweitig verwenden kann, wie für Artikel, Blogs usw. Ich habe versucht, Variationen der folgenden .

Dies wird nicht in die Kommentare Controller-Aktion zu erstellen Erstellen Sie wie unten dargestellt.

[HttpPost] 
public ActionResult Create() 
{ 
    // Save comment code here 

    return View(); 
} 

Es gibt eine einfache Möglichkeit, dies zu tun, ohne an eine bestimmte Route gebunden zu sein?

+0

Wie sieht die HTML-Quelle für das Formular aus, das generiert wird? Was passiert, wenn Sie auf die Senden-Schaltfläche klicken? – mlibby

+0

@mcl danke für den Kommentar. Wenn ich auf den Submit-Button klicke, ändert sich die URL zu/Comment/Create und ich erhalte den Fehler Server Error in der Anwendung '/ MVC3PartialView'. Ich möchte, dass die URL unverändert bleibt und an den Kommentarcontroller zurückgesendet wird. Weißt du irgendeinen Weg, dies zu tun? Würde Ajax das vielleicht lösen? – ctb

+1

Ich denke, was Sie wollen, ist ohne Ajax nicht ganz möglich, da reines HTTP denkt, Sie möchten das Formular an/Comment/Create POST. Meine Vermutung ist, dass Ihr Teil oben "Create" heißt? Das bedeutet, dass es höchstwahrscheinlich nicht als View für eine Aktion funktioniert. Ihre Erstellungsansicht muss etwas Einfaches sein (aber eine vollständige Seite), wie "Danke für die Kommentare" (und mit einer versteckten Formulareingabe können Sie diese Ansicht erhalten, um einen Link zurück zum Artikel bereitzustellen). – mlibby

Antwort

1

Ich fand die Antwort.

@using (Ajax.BeginForm("Create", "Comment", new AjaxOptions() { 
     UpdateTargetId = "MainContainer" })) 
{ 
    <div> 
     <fieldset> 
      <legend>Comments</legend> 

      <div > 
       @Html.LabelFor(m => m.Name) 
       @Html.TextBoxFor(m => m.Name)    
      </div> 

      <div > 
       @Html.LabelFor(m => m.Email) 
       @Html.TextBoxFor(m => m.Email)    
      </div> 

      <div > 
       @Html.LabelFor(m => m.Body) 
       @Html.TextBoxFor(m => m.Body)    
      </div> 

      <p> 
       <input type="submit" value="Create" /> 
      </p> 
     </fieldset> 
    </div> 
} 

Diese Posts zurück mit Ajax und ändert nicht die URL. Oder Sie können es auf diese Weise mit JQuery tun http://jvance.com/blog/2010/02/20/MakingAnAjaxFormWithJQueryInASPdotNETMVC.xhtml

Verwandte Themen