Если вы посмотрите на источник ASP.NET MVC (доступен на Codeplex ), вы увидите, что реализация BeginForm в конечном итоге вызывает следующий код:
static MvcForm FormHelper(this HtmlHelper htmlHelper, string formAction, FormMethod method, IDictionary<string, object> htmlAttributes)
{
TagBuilder builder = new TagBuilder("form");
builder.MergeAttributes<string, object>(htmlAttributes);
builder.MergeAttribute("action", formAction);
builder.MergeAttribute("method", HtmlHelper.GetFormMethodString(method), true);
htmlHelper.ViewContext.HttpContext.Response.Write(builder.ToString(TagRenderMode.StartTag));
return new MvcForm(htmlHelper.ViewContext.HttpContext.Response);
}
Класс MvcForm реализует IDisposable, в своем методе dispose записывает в ответ.
Итак, вам нужно написать нужные теги в вспомогательном методе и вернуть объект, который реализует IDisposable ... в его методе dispose закройте тег.