質問

カミソリで使用する場合、

私は、HTMLヘルパーの難しさを持っています。ヘルパーはWebフォーム・ビュー・エンジンとMVC 2で罰金を働いていたと述べました。しかし、ないかみそりインチ私は、実行時に取得エラーがあります:

Compiler Error Message: CS1502: The best overloaded method match for 'System.Web.WebPages.WebPageExecutingBase.Write(System.Web.WebPages.HelperResult)' has some invalid arguments

Source Error:


Line 1:  @using Wingspan.Web.Mvc;
Line 2:  @Html.IncrementalMenu(MenuBlock.Site)

の表示は、コンパイラの出力が明らかに詳細な拡大

d:\...\Views\Shared\MenuTop.cshtml(2,1): error CS1502: The best overloaded method match for 'System.Web.WebPages.WebPageExecutingBase.Write(System.Web.WebPages.HelperResult)' has some invalid arguments
d:\...\Views\Shared\MenuTop.cshtml(2,7): error CS1503: Argument 1: cannot convert from 'void' to 'System.Web.WebPages.HelperResult'
かみそりはなく、私のヘルパーのように、IncrementalMenu、(MVC 2 Webフォームエンジンビューで罰金を働く)voidを返す。

ないことを私に示して

:コードの行は、(@ Html.IncrementalMenu(...))は、次のメッセージで下線の赤ですが、

私は、コンパイル時にエラーを取得していません

Cannot implicitly convert type 'void' to 'object'

IncrementalMenuはWingspan.Web.Mvc名前空間にあります。次のようにそれの署名があります:

public static void IncrementalMenu(this HtmlHelper html, MenuBlock menuBlock)
{
    // Uses an HtmlTextWriter to render a menu from the sitemap
}

私が間違っているものを知っていれば私はフェラしています...

PSます:

MenuBlockパラメータはメニューによってレンダリングされる識別し、どのように単に列挙型です。それは結構です、この上にない固視行います。

役に立ちましたか?

解決

あなたはこのようなあなたのヘルパーを呼び出すことができます:

@{ Html.IncrementalMenu(MenuBlock.Site); }

Webフォームの構文

<% Html.IncrementalMenu(MenuBlock.Site); %>

(もしあれば)あなたは単に無視され、あなたの方法、および戻り値を呼び出します。

このようなコードは、戻り値を期待して、HTMLストリームに戻り値を書き込みます:

@Html.YourHelper()

Webフォームの構文ます:

<%: Html.YourHelper() %>

同じ、もし結果の値= IHtmlString:!

<%= Server.HtmlEncode(Html.YourHelper()) %>

他のヒント

補遺:

あなたは、@ Html.RenderPartialと同じ、または類似した、エラーを取得することができます。この場合、そのように、れるrenderPartial応答に直接レンダリングするという事実に起因する「カミソリのコードブロック」内部符号化される文字列と必要はない。

@{
   Html.RenderPartial(...);
}

私は、MicrosoftがASP.NET MVCで新しいHtml.Partialが含まれていることを理由の一つであると思います。 Html.Partialは、文字列を返す場合と同様に、それは書き込みにOKです。

@Html.Partial
かなり良く見える

。カミソリの宣言目的の一つは、目の上に簡単なことであることを考えると、これは非常に可能性が真です。

これも一種になり、私の、少なくとも、より快適に感じます。私はそれをすべての時間を行う、文字列を返すことは何であるかを知っています。しかし、「応答に戻ることは」少数のより多くの脳サイクル私はそれを考えるたびに必要です。

そして、それは最終的にMicrosoftが正しいバージョン3で自社製品を得ること古い格言に収まるEG、アクセス97

押し下げ直喩である

。彼らは、バージョン4で物事を台無しCOS、すなわち、Access 2000の...

あなたのHTMLヘルパー適切に(WebFormsViewEngineではなく、他のビューエンジン)カミソリを使用するためにHTMLを表しMvcHtmlStringを返す必要があります。

public static MvcHtmlString Label(this HtmlHelper html, string expression)
{
    return MvcHtmlString.Create("<label>" + expression + "</label>");
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top