2012-04-09 4 views
0

In ASP.NET MVC 3 verwenden wir immer using(@html.BeginForm(){ } Helfer (vorausgesetzt, ohne Parameter verwenden) Formulare mit Postback verwenden.Verwenden Sie htmlhelper, um Aktion in BeginForm() Methode von ASP.NET MVC 3

Der zurückgegebene HTML-Code enthält ein offenes form-Tag mit einigen Attributen und action, die die Postback-URL darstellen.

Also, wenn ich meine benutzerdefinierte BeginForm Helfer überschreiben, brauche ich diese URL. Dieses action Attribut ist nicht nur Aktionsname oder Kombination von {area}/{controller}/{action}.

Ich denke, dies ist eine gleiche URL, die wir verwenden, um die aktuelle Seite zu sehen, weil, wenn wir Seite übergeben wir auf die gleiche Aktion oder gleichen Aktionsnamen mit [HttpPost] Attribut gesichert.

Also wie kann ich diesen Wert von HtmlHelper bekommen?

+0

Nur aus Neugier, wofür brauchen Sie ein individuelles BeginForm? – ngm

Antwort

-1

Verwendung Htmlhelper Argument

public class myBeginForm : IDisposable 
{ 
    private HtmlHelper _myHtmlhelper; 
    public myBeginForm (HtmlHelper htmlHelper, [you can add your need argument here]) 
    { 
     _myHtmlhelper= htmlHelper; 
     var container = new TagBuilder("form"); 

     /// your Code 
    } 

    public void Dispose() 
    { 
     myHtmlhelper.ViewContext.Writer.Write("</form>"); 
    } 
} 
+0

Ich möchte kein Argument hinzufügen, ich erwähnte bei der Frage, ich brauche den Wert von 'htmlhelper', ich bin sicher, dass es einen Weg gibt, es zu bekommen, wie Sie sehen' BeginForm() 'get it – Saeid

3

Sie können ILSpy oder andere Reflektor verwenden und sehen, was in Html.BeginForm geschieht

ich kopieren Sie einfach den Code für Sie einfügen.

+1

Das scheint eine gute Antwort zu sein. Sie sollten es wahrscheinlich als solches markieren. – Roman

0

Wenn Sie ein Aktionsattribut von @ Html.BeginForm() ohne irgendwelche Parameter möchten, können Sie jQuery verwenden. Ich benutze dies, um ein Formular in jqueryUI-Dialogen zu posten.

var form = $('form'); //get the form 
var actionUrl = $('form').attr('action'); //get the action url 

Und dann können Sie POST verwenden

$.ajax({ 
     type: "POST", 
     url: actionUrl, 
     data: form.serialize(),          
     success: function (data, status, xhr) { 
       if (data.Sucess) { 
        //do something 
       } else { 
       } 
     } 
}) 

Grüße.