Tôi đang cố gắng tạo trình trợ giúp khai báo Razor trong thư mục App_Code của mình cho dự án MVC 3 RTM.
Vấn đề tôi gặp phải là các tiện ích mở rộng MVC HtmlHelper, như ActionLink, không khả dụng. Điều này là do các trình trợ giúp được biên dịch bắt nguồn từ System.Web.WebPages.HelperPage
, và mặc dù nó hiển thị một thuộc Html
tính, nhưng loại của nó System.Web.WebPages.HtmlHelper
thay vì System.Web.Mvc.HtmlHelper
.
Một ví dụ về loại lỗi tôi gặp phải là:
Có thể tìm thấy 'System.Web.Mvc.HtmlHelper' không chứa định nghĩa cho 'ActionLink' và không có phương thức mở rộng nào 'ActionLink' chấp nhận đối số đầu tiên của loại 'System.Web.Mvc.HtmlHelper' (bạn có thiếu chỉ thị using hay một tham chiếu lắp ráp?)
Giải pháp duy nhất của tôi là tạo HelperPage của riêng tôi và ghi đè thuộc tính Html:
using System.Web.WebPages;
public class HelperPage : System.Web.WebPages.HelperPage
{
// Workaround - exposes the MVC HtmlHelper instead of the normal helper
public static new HtmlHelper Html
{
get { return ((System.Web.Mvc.WebViewPage) WebPageContext.Current.Page).Html; }
}
}
Sau đó, tôi phải viết những điều sau ở đầu mỗi người trợ giúp:
@inherits FunnelWeb.Web.App_Code.HelperPage
@using System.Web.Mvc
@using System.Web.Mvc.Html
@helper DoSomething()
{
@Html.ActionLink("Index", "Home")
}
Nó có nghĩa là khó đến mức này trong MVC 3, hay tôi đã làm sai điều gì đó?