2012-05-22 35 views
10

Lỗi CA1822: Microsoft.Performance: Tham số 'this' (hoặc 'Me' trong Visual Basic) của 'SomeController.AnAction (string, string)' không bao giờ được sử dụng . Đánh dấu thành viên là tĩnh (hoặc được chia sẻ trong Visual Basic) hoặc sử dụng 'this'/'Me' trong phần thân phương thức hoặc ít nhất một trình truy cập thuộc tính, nếu thích hợp.Bất cứ ai có thể giải thích mục đích và giải pháp của CA1822 trên một hành động điều khiển?

Không thể tìm thấy tác vụ tĩnh 404 khi được yêu cầu qua URL. Tác vụ đang hoạt động như mong đợi khi tính năng phân tích mã bị tắt. Điểm của vấn đề này là gì và biện pháp khắc phục thích hợp là gì?

Lưu ý rằng kiểu trả về của hành động là PartialViewResult, có vẻ như phân tích mã không phàn nàn về điều này nếu kiểu trả về là ActionResult.

[HttpPost] 
    public PartialViewResult BlankEditorRow(string formId, Common.Entities.Common.ObjTypeEnum objType) 
    { 
     if (objType == Common.Entities.Common.ObjTypeEnum.Regular) 
      return new AjaxPartialViewResult("_RowEditor", new ProcedureEntryEntity()) { UpdateValidationForFormId = formId }; 
     else 
      return new AjaxPartialViewResult("_TemplateRowEditor", new ProcedureEntryEntity()) { UpdateValidationForFormId = formId }; 
    } 

Cập nhật: Hình như thay đổi kiểu trả về để ActionResult giải quyết các lỗi, và PartialViewResult là một ActionResult vì vậy nó phải làm việc.

+0

Vui lòng bao gồm mã được đề cập hoặc đoạn mã tương tự – robrich

Trả lời

10

Tôi nghi ngờ rằng việc thay đổi kiểu trả về mà không cần gọi bằng bất kỳ thành viên nào của cá thể thực sự giải quyết được sự cố. Tôi nghi ngờ rằng để thay đổi kiểu trả về, bạn đã thay đổi câu lệnh return thành một cái gì đó đã truy cập một thành viên cá thể.

Bây giờ tôi không biết liệu việc xử lý tuyến đường trong MVC sẽ cho phép bạn đánh dấu phương thức là tĩnh, nhưng đáng để điều tra. Mặc dù cảnh báo được đưa ra về hiệu suất, tôi sẽ nghĩ về nó theo ý định ý định và khả năng đọc.

Thông thường có hai lý do cho một phương pháp hoặc tài sản để trở thành một thành viên dụ (chứ không phải tĩnh):

  • Nó cần phải truy cập vào một thành viên khác chẳng hạn, bởi vì cách thức mà nó cư xử phụ thuộc vào trạng thái của đối tượng
  • nó cần phải cư xử polymorphically dựa trên các loại thực tế của các trường hợp nó được gọi vào, do đó hành vi này có thể được ghi đè

Nếu không phải trong số đó là trường hợp, sau đó phương pháp này có thể được thực hiện tĩnh mà cho biết rằng không có đa hình dự kiến ​​và không có trạng thái cá thể yêu cầu. Một thành viên tĩnh quảng cáo hiệu quả rằng trạng thái duy nhất nó phụ thuộc vào trạng thái của chính nó (và các tham số), và nó sẽ không hoạt động đa hình. Ngoài bất kỳ điều gì khác, điều đó có nghĩa là bạn cũng có thể thử nghiệm mà không cần tạo một cá thể nào.

Tất nhiên, nếu cơ sở hạ tầng của MVC yêu cầu nó là một phương pháp thể hiện, thì bạn chỉ nên chặn cảnh báo, với nhận xét để cho biết thực tế đó.

+0

Có nếu bạn đặt mã tĩnh sau đó hành động không có sẵn trong thời gian chạy vì nó tạo một phiên bản của trình điều khiển và cố gắng thực hiện hành động dựa trên tuyến đường URL. Tôi nghi ngờ rằng CA cho slide này nếu nó là một ActionResult ... bởi vì ngay sau khi tôi thực hiện rằng kiểu trả về lỗi đã biến mất (kiểu trả về ban đầu PartialViewResult thừa kế từ ActionResult nên không có mã nào khác cần thay đổi). Mặc dù tôi không biết. Tôi đang trả lời câu trả lời của bạn bởi vì nó rất thông tin và tôi đã học được điều gì đó mới mẻ, mặc dù thực tế là chúng tôi đã không đi đến đáy thực sự của điều này. – BigOmega

4

Tôi nghĩ CA chỉ không tính đến việc đây là hành động điều khiển trong ứng dụng MVC. Tôi sẽ đàn áp.

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