2011-01-04 43 views
10

Tôi đang làm theo hướng dẫn của MVC Music Store, nhưng tôi vừa mới bị kẹt với Trình trợ giúp Html trong phần 5: Part 5.Không thể sử dụng các loại tĩnh làm tham số

tôi dường như đã theo nó một cách chính xác cho đến nay (hãy sửa lại cho tôi nếu tôi sai :)) ... Tuy nhiên tôi nhận được lỗi sau:

'musicStoreMVC.Helpers.HtmlHelper': static types cannot be used as parameters

Đây là mã từ ứng dụng của tôi :

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 

namespace musicStoreMVC.Helpers 
{ 
    public static class HtmlHelper 
    { 
     public static string Truncate(this HtmlHelper helper, string input, int length) 
     { 
      if (input.Length <= length) 
      { 
       return input; 
      } 
      else 
      { 
       return input.Substring(0, length) + "..."; 
      } 
     } 
    } 
} 

Nếu bất kỳ ai có thể thấy tôi đang làm sai hoặc cần thêm thông tin, tôi sẽ biết ơn các con trỏ !! Cảm ơn.

+0

Nhờ tất cả những người đã trả lời! Tên quá giống nhau !! :) – 109221793

+0

http://stackoverflow.com/questions/5858591/c-sharp-static-types-cannot-be-used-as-type-arguments –

Trả lời

13

Chỉ cần đổi tên lớp tĩnh HtmlHelper thành HtmlHelperExtensions.

+1

Cùng một vấn đề nhưng không hoạt động đối với tôi. Tôi muốn mở rộng 'Microsoft.VisualStudio.TestTools.UnitTesting.Assert'. Thay đổi tên lớp thành bất kỳ thứ gì cũng tạo ra cùng một lỗi ... – CallMeLaNN

+3

OK, vì các phương thức mở rộng không thể được thêm vào 'static class' http://stackoverflow.com/questions/249222/can-i-add-extension-methods -to-an-hiện-tĩnh-class – CallMeLaNN

1

Bạn nhận được xung đột tên - số điện thoại tĩnh HtmlHelper mà bạn khai báo trong mã mẫu và System.Web.Mvc.HtmlHelper là lớp mà bạn thực sự muốn tạo phương thức tiện ích mở rộng. Chỉ cần đổi tên lớp của bạn thành HtmlHelpers (vì nó nằm trong hướng dẫn được liên kết). Cách nó là ngay bây giờ, bạn đang cố gắng để thực hiện một phương pháp mở rộng trên lớp tĩnh được cho là không hoạt động.

1

Đó là vì bạn đang đặt tên cho lớp tiện ích HtmlHelper. Trong truncate, bạn sau đó thử thêm một phương thức mở rộng vào một lớp tĩnh mà bạn không thể.

Một giải pháp đơn giản là đổi tên HtmlHelper thành thứ gì đó khác.

1

this HtmlHelper helper nói rằng Truncate() phải hoạt động như thể đó là phương pháp thể hiện trên HtmlHelper, nhưng bạn đã khai báo HtmlHelper là lớp tĩnh, không thể có phiên bản.

Nếu những gì bạn đang cố gắng làm là tạo phương thức mở rộng trên một lớp khác nhau HtmlHelper, thì khi những người khác đã đề xuất, hãy đổi tên lớp tĩnh này. Nếu bạn chỉ cần phương thức tĩnh, hãy loại bỏ tham số this HtmlHelper helper. Bạn vẫn chưa sử dụng nó.

0

Xóa phần sử dụng

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 

và thêm

using System.Web.Mvc; 
Các vấn đề liên quan