我正在尝试创建一个HtmlHelper
扩展,在后端构建form
。
这样的事情:
public static IHtmlContent HiddenFormFor<TModel, TResult>(
this IHtmlHelper<TModel> htmlHelper,
Expression<Func<TModel, TResult>> expression,
string buttonDescription)
{
var builder = new HtmlContentBuilder();
// This is the part that doesn't fit, I just copied how it's done in the view:
using(htmlHelper.BeginForm("index", "home"))
{
builder.AppendHtml(htmlHelper.HiddenFor(expression));
builder.AppendHtml($"<span type=\"submit\" class=\"label label-primary\">{htmlHelper.Raw(buttonDescription)}</span>");
}
return builder;
}
问题在于,我不知道如何使用BeginForm
和EndForm
构建元素,并将它们放入builder
。
答案 0 :(得分:2)
正如我在评论中已经建议的那样:只需使用partial views
但是你仍然要求知道如何在后端使用它。好像你应该看看Razor
是如何工作的;)使用Razor
,你仍然在命名空间中的类中调用方法。 BeginForm
是来自FormExtensions
。
所以你可以做到以下几点:
...
Using System.Web.Mvc.Html;
public static IHtmlContent HiddenFormFor<TModel, TResult>(
this IHtmlHelper<TModel> htmlHelper,
Expression<Func<TModel, TResult>> expression,
string buttonDescription)
{
var content = new StringBuilder();
content.Append(FormExtensions.BeginForm(htmlHelper)); //adding <form> to htmlhelper
content.append(htmlHelper.HiddenFor(expression)); //Add hidden value
content.append(FormExtensions.EndForm(htmlHelper)); //adding </form> to htmlHelper
return MvcHtmlString.Create(content.ToString());
}
修改强> 进一步研究一下,我发现我认为应该是解决方案。检查上面的代码