4

だから私は.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');" 
 />
}

これは拡張です

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ですか?

4

2 に答える 2

6
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>
于 2012-04-13T21:58:08.133 に答える
0

呼び出すBeginFormとフォームタグがレンダリングされるため、そのメソッドを呼び出す以外に何もする必要はありません。

public static MvcHtmlString EditOrDelete(this HtmlHelper html)
{
    using(html.BeginForm())
    {
        return MvcHtmlString.Create(" additional fields ");
    }
}

usingステートメントは.Dispose()、メソッドがreturingする前に呼び出され、終了フォームタグの後に文字列が書き込まれます。html.ViewContext.Writer.Write代わりにを使用して、応答に文字列を書き込みます。(Darin Dimitrovの回答を参照してください)

呼び出しをusingでラップすると、が呼び出されたときに終了フォームタグも自動的にレンダリングされますDispose

于 2012-04-13T21:53:34.757 に答える