2012-10-31 37 views
7

Tôi đang cố gắng tạo trình trợ giúp html tùy chỉnh sẽ truy xuất một số văn bản từ tệp XML và hiển thị nó trên chế độ xem. XML được tổ chức theo cấu trúc phân cấp, trong đó các nút trên đại diện cho các tên bộ điều khiển, theo các tên hành động và sau đó là các khóa riêng lẻ.ASP.NET MVC - Nhận tên điều khiển và hành động hiện tại trong trình trợ giúp

Mục tiêu là để thực hiện cú pháp như:

@Html.Show("Title") 

đâu helper sẽ suy ra tên điều khiển và tên hành động từ quan điểm nơi nó được gọi.

Có cách nào để nhận thông tin đó trong phương pháp mở rộng trình trợ giúp html không?

Trả lời

8

Bạn có thể truy xuất bộ điều khiển và tác vụ hiện tại từ htmlHelper.ViewContext.RouteData. Sử dụng các phương pháp khuyến nông dưới đây để lấy giá trị tương ứng từ xml:

//make sure you include System.Xml.XPath, otherwise extension methods for XPath 
//won't be available 
using System.Xml.XPath; 

public static MvcHtmlString Show(this HtmlHelper htmlHelper, 
               string key) 
{ 
    XElement element = XElement.Load("path/to/yourXmlfile.xml"); 
    RouteData routeData = htmlHelper.ViewContext.RouteData; 
    var keyElement = element.XPathSelectElements(string.format("//{0}/{1}/{2}", 
                routeData.GetRequiredString("controller"), 
                routeData.GetRequiredString("action"), 
                key) 
               ).FirstOrDefault(); 

    if (keyElement == null) 
     throw new ApplicationException(
      string.format("key: {0} is not defined in xml file", key)); 

    return new MvcHtmlString(keyElement.Value); 
} 
8

Đây là Action name:

ViewContext.Controller.ValueProvider.GetValue("action").RawValue.ToString() 
12

Thậm chí đơn giản hơn:

htmlHelper.ViewContext.RouteData.Values["controller"] 

htmlHelper.ViewContext.RouteData.Values["action"] 

cho bạn điều khiển và hành động na tôi, tương ứng.

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