在ASP.NET MVC 3中,我们总是使用using(@html.BeginForm(){ }
帮手(假设使用不带任何参数)使用带有回传的形式。
返回的HTML,包括开放form
与某些属性和标签action
表示回传网址。
所以,当我重写我的自定义BeginForm
帮助我需要这个网址。 这个action
属性不仅仅是动作的名称或组合{area}/{controller}/{action}
。
我想这是我们用它来查看当前页面,因为当我们提出我们的支持,以同样的动作或相同的动作名称与页面相同的URL [HttpPost]
属性。
所以,我怎么能得到这个值HtmlHelper
?
您可以使用ILSpy或任何其他反射器,看看在Html.BeginForm发生
我只是复制粘贴代码为您服务。
// System.Web.Mvc.Html.FormExtensions
/// <summary>Writes an opening <form> tag to the response. When the user submits the form, the request will be processed by an action method.</summary>
/// <returns>An opening <form> 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;
}
如果你想从@ 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 {
}
}
})
问候。
使用的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>");
}
}