Почему делает ASP.NET, о котором MVC заботятся о моих свойствах только для чтения во время привязки данных?

Править: Добавленная щедрость, потому что я ищу решение MVC3 (если Вы существуете) кроме этого:

DataAnnotationsModelValidatorProvider. AddImplicitRequiredAttributeForValueTypes = ложь;


У меня есть свойство только для чтения на моей модели 'Address' 'CityStateZip'.

Это - просто удобный способ получить город, состояние, zip от американского адреса. Это выдает исключение, если страной не являются США (вызывающая сторона, как предполагается, проверяет сначала).

    public string CityStateZip
    {
        get
        {
            if (IsUSA == false)
            {
                throw new ApplicationException("CityStateZip not valid for international addresses!");
            }

            return (City + ", " + StateCd + " " + ZipOrPostal).Trim().Trim(new char[] {','});
        }
    }

Это - часть моей модели, таким образом, она связывается. До MVC2 RC2 ASP.NET это поле никогда не вызывало проблему во время привязки данных. Я даже не действительно думал об этом - в конце концов, это только только для чтения.

Теперь, хотя с январем 2010 выпуск RC2 это дает мне, ошибка во время привязки данных - becasue образцовый редактор связей по умолчанию, кажется, хочет проверить это значение (даже при том, что это только для чтения).

Это - 'основа. OnModelUpdated' строка, которая заставляет эту ошибку быть инициированной.

public class AddressModelBinder : DefaultModelBinder
{
    protected override void OnModelUpdated(ControllerContext controllerContext, ModelBindingContext bindingContext)
    {
        base.OnModelUpdated(controllerContext, bindingContext);

Изменения последних минут в modelbinder очевидно вызвали это изменение в поведении - но я не совсем уверен уже, что перестолкновения его - или является ли это ошибкой? Я передаю это команде MVC, но любопытный, если у кого-либо еще есть какие-либо предложения тем временем, как я могу препятствовать тому, чтобы это свойство связало.

Эту статью определенно стоит прочитать об изменениях - но не упоминает свойства только для чтения вообще (не, что я ожидал бы это к). Проблема (если существует один) может быть более широкой, чем эта ситуация - я просто не уверен в любых перестолкновениях - если таковые имеются!

Контроль ввода по сравнению с проверкой допустимости модели в ASP.NET MVC


Согласно просьбе @haacked вот stacktrace:

Я получаю это путем простого добавления следующей строки к ЛЮБОЙ модели и создания сообщения к соответствующему методу действия. В этом экземпляре я добавил его к своей самой простой модели.

 public string Foo { get { throw new Exception("bar"); } }

[TargetInvocationException: средство доступа Свойства 'Foo' на объектном 'Rolling_Razor_MVC.Models. ContactUsModel' выдал следующее исключение:'bar'] Система. ComponentModel. ReflectPropertyDescriptor. GetValue (Возражают компоненту), +390 Систем. Сеть. Mvc. <> c __ DisplayClassb. b __ () +18 Систем. Сеть. Mvc. ModelMetadata.get_Model () +22 Системы. Сеть. Mvc. ModelMetadata.get_RealModelType () +29 Систем. Сеть. Mvc. d __ 0. MoveNext () +38 Систем. Linq. d __ 14'2. MoveNext () +273 Системы. Сеть. Mvc. <Проверьте> d __ 5. MoveNext () +644 Системы. Сеть. Mvc. DefaultModelBinder. OnModelUpdated (ControllerContext controllerContext, ModelBindingContext bindingContext) +92 Системы. Сеть. Mvc. DefaultModelBinder. BindComplexElementalModel (ControllerContext controllerContext, ModelBindingContext bindingContext, Объектная модель) +60 Систем. Сеть. Mvc. DefaultModelBinder. BindComplexModel (ControllerContext controllerContext, ModelBindingContext bindingContext) +1048 Систем. Сеть. Mvc. DefaultModelBinder. BindModel (ControllerContext controllerContext, ModelBindingContext bindingContext) +280 Систем. Сеть. Mvc. Контроллер. TryUpdateModel (модель TModel, Строковый префикс, Строка [] includeProperties, Строка [] excludeProperties, IValueProvider valueProvider) +449 Систем. Сеть. Mvc. Контроллер. TryUpdateModel (модель TModel) +73

21
задан Gabriele Petrioli 10 May 2011 в 22:50
поделиться

3 ответа

SVN знает, что произошло изменение в репозитории, но не знает, что это было за изменения. Возможно, вы внесли то же самое изменение в свою рабочую копию, но если вы на самом деле не попытаетесь сделать обновление, чтобы SVN мог выполнить разрешение, оно не будет проверять, что ваше локальное изменение совпадает с изменением репо.

Обновите svn , и разрешение конфликтов должно быть автоматическим. Однако, если вы внесли изменения в те же самые файлы, может потребоваться разрешить их вручную, даже если это точно такое же изменение (даже более вероятно, если это изменение было переименованием папки)

Возможно, потребуется также svn resolved для принудительного разрешения конфликтов вручную.

В худшем случае можно всегда копировать измененные файлы, возвращать локальные изменения, обновлять и заменять файлы в новой папке.

-121--3842590-

Не уверен, что понимаю ваш вопрос, но попробуйте это:

DropDownList1.ClearSelection()

или

DropDownList1.SelectedIndex = -1;
-121--3509307-

Я считаю, что испытываю аналогичную проблему. Я разместил сведения:

http://forums.asp.net/t/1523362.aspx


изменить : Ответ от команды MVC (см. URL-адрес выше):

Мы исследовали это и пришли к выводу, что система проверки ведет себя так, как ожидалось. Поскольку проверка модели включает в себя попытку выполнить проверку по всем свойствам, а свойства типа значения, не допускающего значения NULL, имеют неявный атрибут [Обязательный], мы проверяем это свойство и вызываем его получение в процессе. Мы понимаем, что это переломное изменение от V1 продукта, но необходимо сделать так, чтобы новая система валидации модели работала правильно.

У вас есть несколько вариантов решения этой проблемы. Любой из них должен работать:

  • Измените свойство Date на метод вместо свойства; таким образом, она будет игнорироваться инфраструктурой MVC.
  • Изменить тип свойства на DateTime? вместо DateTime. Это приведет к удалению неявного [обязательного] свойства.
  • Снимите статический флаг DataAnnotations ModelValidateProvider.AddImplicitRequiredAttribityForStartTypes. Это приведет к удалению неявного значения [Required] из всех свойств типа значения, не допускающего значения NULL, в масштабах всего приложения. Мы рассматриваем возможность добавления в V3 продукта атрибута, который будет сигнализировать нам "не связывать его, не проверять его, просто делать вид, что это свойство не существует".

Еще раз спасибо за отчет!

18
ответ дан 29 November 2019 в 21:52
поделиться

Конечно, я мог бы преобразовать CityStateZip в GetCityStateZip () , но тогда я не могу так легко привязать его чем-то вроде silverlight. Это может сработать как временное решение для всех, кто сталкивается с этой проблемой.

0
ответ дан 29 November 2019 в 21:52
поделиться

У МЕНЯ ЕСТЬ ТОЧНАЯ ТАКАЯ ПРОБЛЕМА !!

Для получения дополнительной информации о моей проблеме вы можете посетить Неиспользуемое свойство модели ASP.NET MVC 2.0, которое вызывается при отправке продукта на сервер?

означает ли это, что нам нужно программировать наши свойства, исходя из предположения, что они будут вызваны неожиданно (до того, как свойства, от которых это зависит, будут настроены / инициализированы и т. д.) ... если это так, это означает изменение в наших методах программирования, и я хотел бы знать, как действовать дальше.

между тем, у меня есть простая проверка «если», которая решает проблему.

0
ответ дан 29 November 2019 в 21:52
поделиться
Другие вопросы по тегам:

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