2011-02-10 21 views
23

これはまっすぐ進むと思っていましたが、どうやってそれを解決することができました。 URLパラメータを別のアクションに渡す場合は、そのための新しいルートを作成する必要がありますか?ASP.Net MVC Html.RenderActionを使用してurlパラメータをChildActionに渡す方法

コントローラ

[ChildActionOnly] 
    public ActionResult ContentSection(string sectionAlias, string mvcController, string mvcAction = null) 

@Html.RenderAction("ContentSection", "Portal", new {sectionAlias = "TermsAndConditions", mvcController = "Portal", mvcAction = "ChoosePayment"}) 

エラー

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

答えて

30

ここでの問題は、

@Html.RenderAction("ContentSection", "Portal", new {sectionAlias = "TermsAndConditions", mvcController = "Portal", mvcAction = "ChoosePayment"}) 

は(もResponse.Write同じである)WebフォームViewEngine

<%= Html.RenderAction("ContentSection", "Portal", new {sectionAlias = "TermsAndConditions", mvcController = "Portal", mvcAction = "ChoosePayment"}) %> 

と等価です。 RenderActionvoidを返すので、Response.Writeにすることはできません。 @{ }構文は、WebフォームViewEngine以下に相当しますレイザー・ビュー・エンジンのコードブロックを、意味

@{ 
    Html.RenderAction("ContentSection", "Portal", new {sectionAlias = "TermsAndConditions", mvcController = "Portal", mvcAction = "ChoosePayment"}); 
} 

<% Html.RenderAction("ContentSection", "Portal", new {sectionAlias = "TermsAndConditions", mvcController = "Portal", mvcAction = "ChoosePayment"}); %> 
+9

代わりに@ Html.Action(...)を呼び出すことで、コンテンツを返すメソッドとして呼び出すことができます(中括弧などを使用したくない場合) –

+0

ありがとう、ただ他の同様の記事を読んでそれを理解しました。ありがとう!私はこれも前に一度私を得たと思う.. – JBeckton

+0

細かい説明! –

11

短い答え何がやりたいことはこれですuse @ Html.Action()です。

@Html.Action("ContentSection", "Portal", new {sectionAlias = "Terms", ...}) 

long answerはすでにNathan Andersonによって与えられています。

P.S.この回答のクレジットは、実際にネイサンの答えにコメントとして投稿したJames Nailに寄付されますが、私はそれが非常に簡単で貴重であり、個人的な回答でなければならないと考えていました。

関連する問題