如何在asp.net核心的后端构建表单?

时间:2017-04-28 13:41:12

标签: c# asp.net

我正在尝试创建一个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;
}

问题在于,我不知道如何使用BeginFormEndForm构建元素,并将它们放入builder

1 个答案:

答案 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());

}

修改 进一步研究一下,我发现我认为应该是解决方案。检查上面的代码