使用的HtmlHelper以获得BeginForm(行动)ASP.NET MVC 3的方法(Use

2019-09-16 10:44发布

在ASP.NET MVC 3中,我们总是使用using(@html.BeginForm(){ }帮手(假设使用不带任何参数)使用带有回传的形式。

返回的HTML,包括开放form与某些属性和标签action表示回传网址。

所以,当我重写我的自定义BeginForm帮助我需要这个网址。 这个action属性不仅仅是动作的名称或组合{area}/{controller}/{action}

我想这是我们用它来查看当前页面,因为当我们提出我们的支持,以同样的动作或相同的动作名称与页面相同的URL [HttpPost]属性。

所以,我怎么能得到这个值HtmlHelper

Answer 1:

您可以使用ILSpy或任何其他反射器,看看在Html.BeginForm发生

我只是复制粘贴代码为您服务。

// System.Web.Mvc.Html.FormExtensions
/// <summary>Writes an opening &lt;form&gt; tag to the response. When the user submits the form, the request will be processed by an action method.</summary>
/// <returns>An opening &lt;form&gt; tag. </returns>
/// <param name="htmlHelper">The HTML helper instance that this method extends.</param>
public static MvcForm BeginForm(this HtmlHelper htmlHelper)
{
    string rawUrl = htmlHelper.ViewContext.HttpContext.Request.RawUrl;
    return htmlHelper.FormHelper(rawUrl, FormMethod.Post, new RouteValueDictionary());
}


// System.Web.Mvc.Html.FormExtensions
private static MvcForm FormHelper(this HtmlHelper htmlHelper, string formAction, FormMethod method, IDictionary<string, object> htmlAttributes)
{
    TagBuilder tagBuilder = new TagBuilder("form");
    tagBuilder.MergeAttributes<string, object>(htmlAttributes);
    tagBuilder.MergeAttribute("action", formAction);
    tagBuilder.MergeAttribute("method", HtmlHelper.GetFormMethodString(method), true);
    bool flag = htmlHelper.ViewContext.ClientValidationEnabled && !htmlHelper.ViewContext.UnobtrusiveJavaScriptEnabled;
    if (flag)
    {
        tagBuilder.GenerateId(htmlHelper.ViewContext.FormIdGenerator());
    }
    htmlHelper.ViewContext.Writer.Write(tagBuilder.ToString(TagRenderMode.StartTag));
    MvcForm result = new MvcForm(htmlHelper.ViewContext);
    if (flag)
    {
        htmlHelper.ViewContext.FormContext.FormId = tagBuilder.Attributes["id"];
    }
    return result;
}


Answer 2:

如果你想从@ Html.BeginForm()action属性不带任何参数,你可以使用jQuery。 我用这个阿贾克斯后一种形式jQueryUI的对话框内。

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

然后你可以使用POST

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

问候。



Answer 3:

使用的HtmlHelper参数

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>");
    }
}


文章来源: Use htmlhelper to get action in BeginForm() Method of ASP.NET MVC 3