如何在自定义帮助程序中使用Html.BeginForm?

Tra*_*s J 3 c# html-helper razor asp.net-mvc-3

因此,我试图将.cshtml视图中的此剃刀语法转换为.cs中的帮助程序扩展名。Darin在此发表了一篇很棒的文章:https : //stackoverflow.com/a/8187441/1026459。但是,我在使其工作时遇到了一些问题。

这是简单的标记

@using (Html.BeginForm("Restore", "GlobalCrud"))
{
 @Html.Hidden("entityId", "Id")
 <input class="ui-icon ui-icon-power" type="submit" 
  onclick="return confirm('Clicking OK will restore this record');" 
 />
}
Run Code Online (Sandbox Code Playgroud)

这是扩展

public static MvcHtmlString EditOrDelete(this HtmlHelper html)
{
  var s = html.BeginForm();
  return MvcHtmlString.Create(s + " additional fields " + "</form>");
}
Run Code Online (Sandbox Code Playgroud)

这是用途:

@using namespace.CustomHelper
@Html.EditOrDelete()
Run Code Online (Sandbox Code Playgroud)

这是输出:

<form method="post" action="/Completed/Manage">
System.Web.Mvc.Html.MvcForm additional fields 
</form>
Run Code Online (Sandbox Code Playgroud)

大多数情况下,辅助扩展可以满足我的需求。但是,我不确定如何将其转换回正确的html字符串。返回内容包括System.Web.Mvc.Html.MvcForm在文本中。我在" additional fields "这里添加简洁是因为那里没有问题。</form>之所以using@Html.BeginForm()添加</form>标记,是因为我知道随处理的普通语句会在标记处理后添加标记。

我如何正确返回由生成的表格.BeginForm

Dar*_*rov 5

public static class HtmlExtensions
{
    public static void EditOrDelete(this HtmlHelper html)
    {
        using (html.BeginForm())
        {
            html.ViewContext.Writer.Write("additional fields");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

然后:

@using namespace.CustomHelper
@{Html.EditOrDelete();}
Run Code Online (Sandbox Code Playgroud)

发出:

<form action="/" method="post">additional fields</form>
Run Code Online (Sandbox Code Playgroud)