2011-02-10 14 views
23

Tôi nghĩ rằng điều này sẽ tiến thẳng về phía trước nhưng tôi đã xoay xở để tìm hiểu cách làm. Nếu tôi muốn chuyển các tham số URL cho một hành động khác, tôi có phải tạo một tuyến mới cho điều đó không?ASP.Net MVC Làm cách nào để chuyển các tham số url bằng cách sử dụng Html.RenderAction cho một hành động ChildAction

khiển

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

xem

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

lỗi

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

Trả lời

30

Vấn đề ở đây là

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

là tương đương với

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

Trong các Webforms ViewEngine (mà cũng là cùng một Response.Write). Vì RenderAction trả lại void, bạn không thể Response.Write. Những gì bạn muốn làm điều này là:

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

Cú pháp @{ } nghĩa một khối mã trong công cụ xem Razor, đó sẽ là tương đương với sau khi các Webforms ViewEngine:

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

Hoặc bạn có thể gọi @ Html.Action (...) thay vào đó, để gọi nó là phương thức trả về nội dung của bạn (nếu bạn không thích sử dụng dấu ngoặc nhọn, v.v.) –

+0

Cảm ơn, tôi chỉ đã tìm ra bằng cách đọc một bài đăng tương tự khác. Cảm ơn! Tôi nghĩ rằng điều này đã cho tôi một lần trước khi quá .. – JBeckton

+0

Giải thích tốt! –

11

Câu trả lời ngắn sẽ là: sử dụng @ Html.Action().

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

long answer đã được Nathan Anderson đưa ra.

P.S. Tín dụng cho câu trả lời này thực sự đi đến James Nail, người đăng nó như một bình luận trong câu trả lời của Nathan, nhưng tôi thấy nó rất dễ dàng và có giá trị mà tôi nghĩ rằng nó phải là một câu trả lời cá nhân.

Các vấn đề liên quan