所以我试图将.cshtml视图中的这个剃刀语法转换为.cs中的帮助扩展。达林在这里有一篇很棒的文章: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');"
/>
}
这是扩展
public static MvcHtmlString EditOrDelete(this HtmlHelper html)
{
var s = html.BeginForm();
return MvcHtmlString.Create(s + " additional fields " + "</form>");
}
这是用法:
@using namespace.CustomHelper
@Html.EditOrDelete()
这是输出:
<form method="post" action="/Completed/Manage">
System.Web.Mvc.Html.MvcForm additional fields
</form>
大部分助手的延伸产生了我的需要。但是,我不确定我应该如何将其转换回正确的html字符串。返回包括文本中的System.Web.Mvc.Html.MvcForm
。我在这里添加" additional fields "
是为了简洁,因为那里没有问题。添加</form>
是因为我知道using
的正常@Html.BeginForm()
语句在处置时会添加</form>
标记。
如何正确返回.BeginForm
生成的表单?
答案 0 :(得分:5)
public static class HtmlExtensions
{
public static void EditOrDelete(this HtmlHelper html)
{
using (html.BeginForm())
{
html.ViewContext.Writer.Write("additional fields");
}
}
}
然后:
@using namespace.CustomHelper
@{Html.EditOrDelete();}
发射:
<form action="/" method="post">additional fields</form>
答案 1 :(得分:0)
调用BeginForm
呈现表单标记,因此除了调用该方法之外,您无需执行任何操作。
<击> 撞击>
<击>public static MvcHtmlString EditOrDelete(this HtmlHelper html)
{
using(html.BeginForm())
{
return MvcHtmlString.Create(" additional fields ");
}
}
击> <击> 撞击>
using语句将导致在方法撤销之前调用.Dispose()
,导致在结束表单标记之后写入字符串。使用html.ViewContext.Writer.Write
将字符串写入响应。 (见Darin Dimitrov's answer)
Dispose
时,将调用包装在使用中会自动生成结束表单标记。