2013-09-21 75 views
5

Tôi đã duyệt web đang cố gắng tìm một ví dụ/hướng dẫn chi tiết về cách tạo và sử dụng Trình trợ giúp HTML tùy chỉnh của riêng tôi cho ứng dụng MVC 3 Razor của tôi như sauThêm một Trình trợ giúp HTML tùy chỉnh vào Dự án MVC

Adding your own HtmlHelper in ASP.NET MVC 3

tôi đã tạo ra một lớp (tỉa nó xuống một chút) như vậy

using System; 
using System.Collections.Generic; 
using System.Globalization; 
using System.Linq; 
using System.Linq.Expressions; 
using System.Web; 
using System.Web.Mvc; 
using System.Web.Mvc.Html; 

namespace MyWebApp 
{ 
    public static class ExtensionMethods 
    { 
     public static MvcHtmlString StateDropDownListFor<TModel, TValue> 
         (this HtmlHelper<TModel> html, 
             Expression<Func<TModel, TValue>> expression) 
     { 
      Dictionary<string, string> stateList = new Dictionary<string, string>() 
      { 
       {"AL"," Alabama"}, 
       {"AK"," Alaska"}, 
       {"AZ"," Arizona"}, 
       {"AR"," Arkansas"} 

       }; 
       return html.DropDownListFor(expression, 
         new SelectList(stateList, "key", "value")); 
     } 

    } 
} 

Cho đến nay rất tốt,

Bên trong bộ điều khiển của tôi, tôi cũng nói thêm tài liệu tham khảo

using System.Web.Mvc.Html; 

Bây giờ bên trong quan điểm của tôi tôi đã sau

@Html.StateDropDownList(x => x.State) 

Nhưng tôi nhận được lỗi sau

System.web.mvc.htmlhelper<system.collections.generic.list<Profile.ProfileImages>> does  not contain a definition for StateDropDownList and no extension method  StateDropDownList acception a first argument of type  system.web.mvc.htmlhelper<System.Collections.Generic.List<Profile.ProfileImages>> could be  found(Are you missing a using directive of an assembly reference?) 

Ai đó có thể xin vui lòng cho tôi biết những gì im làm sai ở đây.

+0

Bạn có trình trợ giúp HTML có tên DisplayImageFor không? –

+0

@ UfukHacıoğulları Xin lỗi tôi đã thêm tuyên bố lỗi không chính xác, tôi đã cập nhật ở trên. –

Trả lời

15

Bạn nên bao gồm không gian tên theo quan điểm của bạn:

@using MyWebApp 

Hoặc bạn có thể nhập không gian tên này cho tất cả các quan điểm từ web.config.

<system.web.webPages.razor> 
    <pages pageBaseType="System.Web.Mvc.WebViewPage"> 
    <namespaces> 
     <add namespace="System.Web.Mvc" /> 
     <add namespace="System.Web.Mvc.Ajax" /> 
     <add namespace="System.Web.Mvc.Html" /> 
     <add namespace="System.Web.Optimization" /> 
     <add namespace="System.Web.Routing" /> 
     <add namespace="MyWebApp" /> 
    </namespaces> 
    </pages> 
</system.web.webPages.razor> 
+0

Cảm ơn sự giúp đỡ của bạn. –

3

Tôi nghĩ một lựa chọn dễ dàng hơn sẽ được thực hiện như sau: 1. Tạo một cái nhìn như bình thường, đặt những người giúp đỡ bạn trong đó như thường lệ với sự pha trộn của mã và html như bạn muốn. 2. Di chuyển khung nhìn sang thư mục App_Code. 3. Nhận giúp bạn trong tất cả các quan điểm của bạn như vậy (Lưu ý rằng _MyHelpers là tên của quan điểm trong thư mục App_Code):

@_MyHelpers.JQMRadioTrueFalse("Voice Mail on your Home Phone?", "HomePhoneHasAnswerPhone", Model.TrueFalse, t.HomePhoneHasAnswerPhone) 

Đây sẽ là một ví dụ về một cái nhìn trong thư mục App_Code đó là được truy cập trên bất kỳ chế độ xem nào ở trên:

@helper JQMRadioList(string Legend, string RadioListName, List<Fizz.DomainClasses.GenericClasses.GenericDropDownOption> options, bool Horizontal = false, string CurrentSelection = "") 
    { 
     <fieldset data-role="controlgroup" data-mini="true" data-theme="b" @((Horizontal) ? " data-type=\"horizontal\"" : "")> 
      <legend>@Legend:</legend> 
      @foreach (var li in options) 
      { 
       @JQMRadioListItem(RadioListName, li.TheValue, li.Text, CurrentSelection) 
      } 
     </fieldset> 
    } 
+0

Không chắc ai đã bỏ phiếu này nhưng tôi có thể hỏi lý do là gì? – Michael

+0

Câu trả lời này cho thấy cách tạo trợ giúp trong chế độ xem. Nó là một lựa chọn thay thế cho các khung nhìn dựa trên mã và không có lý do nào cho downvote. –