Вы можете обернуть свой код в Html-расширение, такое как BeginForm.Из вашего кода вызовите BeginForm в нужном месте.
Вы должны вернуть объект, который реализует IDisposable.В методе dispose вы вызываете Dispose для сохраненного результата в BeginForm.
В результате вы получаете:
<% using (Html.MyBeginForm()) { %>
<%=Html.LocalizedSaveButton() %>
<%=Html.LocalizedCancelLink(RoutingHelper.HomeDefault()) %>
<% } %>
Хитрость заключается не в том, чтобы вернуть строку или MvcHtmlString, а непосредственно записать выводиспользуя:
htmlHelper.ViewContext.Writer.Write(....);
Это будет делать что-то вроде:
public class MyForm : IDisposable {
private MvcForm _form;
private ViewContext _ctx;
public MyForm(HtmlHelper html, /* other params */) {
_form = html.BeginForm();
_ctx = html.ViewContext;
}
public Dispose() {
_form.Dispose();
_ctx.Writer.Write("html part 3 => closing tags");
}
}
и расширение:
public static MyForm MyBeginForm(this HtmlHelper html /* other params */) {
html.ViewContext.Writer.Write("html part 1");
var result = new MyForm(html);
html.ViewContext.Writer.Write("html part 2");
return result;
}
Отказ от ответственности : Это не проверенокод.