Вопрос по asp.net-mvc-4 – System.ComponentModel.DataAnnotations.compare vs System.Web.Mvc.Compare

52

Проект MVC 4 Beta не может быть скомпилирован после обновления до .Net 4.5.

Это происходит из-за конфликта между System.ComponentModel.DataAnnotations.CompareAttribute  а такжеSystem.Web.Mvc.CompareAttribute

System.ComponentModel.DataAnnotations.CompareAttribute MSDN documentation говорит:

Provides an attribute that compares two properties.

В то время какSystem.Web.Mvc.CompareAttribute MSDN documentation говорит:

Provides an attribute that compares two properties of a model.

В чем разница между этими двумя понятиями и когда это будет "умнее"? использовать каждый из них?

10x.

@ Джош, пожалуйста, смотрите мой ответ для более подробной информации по этому вопросу. joelmdev
Хороший вопрос. Мне было интересно, что было умнее, тоже. Josh Mouch
Мой ответ помогает? Если это так, было бы здорово, если бы вы могли пометить это как ответ. Спасибо :) Vinney Kelly

Ваш Ответ

6   ответов
2

эта почтаони также предлагают другое решение, которое заключается в перемещении ссылки на предпочтительное пространство имен для Compare () внутри пространства имен модели. пример. если вы предпочитаете использовать Сравнить сSystem.Web.Mvc, используйте:

using System.ComponentModel.DataAnnotations;

namespace MyProject.MyViewModel
{
    using System.Web.Mvc;

Компилятор будет сначала искать в пространстве имен модели.

38

глядя на документацию MSDN и выполнив буквальное сравнение двух классов, я заметил, что оба класса являются производными от System.ComponentModel.DataAnnotations.ValidationAttribute. На самом деле, классы практически одинаковы. Единственное заметное отличие состоит в том, что версия MVC также реализует IClientValidatable, который добавляет следующие свойства:

FormatPropertyForClientValidation - (static member) Formats the property for client validation by prepending an asterisk and a dot. GetClientValidationRules - Gets a list of compare-value client validation rules for the property using the specified model metadata and controller context.

Что касается того, какой класс вы должны использовать, если модель будет напрямую связана с представлением, используйте версию MVC, чтобы вы могли воспользоваться проверкой на стороне клиента. Однако, если вы используете ViewModels, вы можете придерживаться класса ComponentModel и избежать ненужных накладных расходов на дополнительные свойства. Ваш звонок!

System.Web.Mvc.CompareAttribute

System.ComponentModel.DataAnnotations.CompareAttribute

14

за исключением того, который вы должны использовать ...

Причина, по которой у вас возникает конфликт после изменения целевой платформы на 4.5, заключается в том, что до .NET 4.5в пространстве имен System.ComponentModel.DataAnnotations отсутствует класс CompareAttribute и класс, определенный в System.Web.Mvc, заполнил пробел. Таким образом, в качестве примера, если вы использовали[Compare] а также[Required] Атрибуты в вашем модельном классе до обновления вашей целевой структуры вы получили конфликт при обновлении.

Предполагая, что вы не используете ничего вSystem.Web.Mvc пространство имен в вашем классе модели, вы должны удалить этоusing заявление и пусть оно опирается наSystem.ComponentModel.DataAnnotations Пространство имен. Ненавязчивая проверка на стороне клиента будет продолжать работать точно так же, как и раньше, так же, как и для других атрибутов, которыми вы украшаете свойства вашей модели из того же пространства имен (например,Required).

Error: User Rate Limit Exceeded
4

.NET 4.5), IntelliSense предполагает, чтоSystem.Web.Mvc.CompareAttribute являетсяdeprecated.

я использовалSystem.ComponentModel.DataAnnotations.CompareAttribute и работает нормально. Это такжеdoes the client-side validation!

|improve this answer answered Nov 29 '13 at 22:14 erdingererdinger 2,79312945
16

Posted by GavK on 6/17/2012 at 5:13 AM

I added a full reference to [System.Web.Mvc.Compare(...)] rather than just using [Compare(...)]

У меня работает в VS 2012 ...

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded Saturn Technologies
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
6

вы можете просто добавить эту строку:

using CompareAttribute = System.Web.Mvc.CompareAttribute;

Error: User Rate Limit Exceeded

Похожие вопросы