¿Por qué ASP.NET MVC se preocupa por mis propiedades de solo lectura durante el enlace de datos?

Editar: Recompensa agregada porque estoy buscando una solución MVC3 (si existe) diferente a esta:

DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false;

Tengo una propiedad de solo lectura en mi modelo de 'Dirección''CityStateZip'.

Es solo una forma conveniente de obtener la ciudad, el estado y el código postal desde una dirección de EE. UU. Lanza una excepción si el país no es EE. UU. (Se supone que la persona que llama debe verificar primero).

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

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

Esto es parte de mi modelo, por lo que se limita. Antes de ASP.NET MVC2 RC2, este campo nunca causó un problema durante el enlace de datos. Nunca lo pensé realmente, después de todo, solo es de solo lectura.

Ahora, aunque con la versión RC2 de enero de 2010, me da un error durante la vinculación de datos, ya que el archivador del modelo predeterminado parece querer verificar este valor (aunque sea de solo lectura).

Es la línea 'base.OnModelUpdated' que hace que se active este error.

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

Los cambios de última hora en la carpeta modelo evidentemente causaron este cambio en el comportamiento, pero aún no estoy seguro de cuáles son sus repulsiones, o si esto es o no un error. Estoy transmitiendo esto al equipo de MVC, pero tengo curiosidad por saber si alguien más tiene alguna sugerencia mientras tanto cómo puedo evitar que esta propiedad se vincule.

Vale la pena leer este artículo sobre los cambios, pero no menciona en absoluto las propiedades de solo lectura (no es que lo espere). El problema (si hay uno) puede ser más amplio que esta situación, simplemente no estoy seguro acerca de cualquier repurcusión, ¡si es que hay alguna!

Validación de entrada vs. Validación de modelo en ASP.NET MVC

Según lo solicitado por @haacked, aquí está el stacktrace:

Obtengo esto simplemente agregando la siguiente línea a CUALQUIER modelo y haciendo una publicación en el método de acción correspondiente. En este caso, lo agregué a mi modelo más simple posible.

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

[TargetInvocationException: el acceso de propiedad 'Foo' en el objeto 'Rolling_Razor_MVC.Models.ContactUsModel' arrojó la siguiente excepción: 'bar'] System.ComponentModel.ReflectPropertyDescriptor.GetValue (componente del objeto) +390 System.Web.Mvc. <> C__DisplayClassb. <GetPropertyValueAccessor> b__a () +18 System.Web.Mvc.ModelMetadata.get_Model () +vc. ModelMetadata.get_RealModelType () +29 System.Web.Mvc. <GetValidatorsImpl> d__0.MoveNext () +38 System.Linq. <SelectManyIterator> d__14`2.MoveNext () +273 System.Web.Mvc. <Validate> d__5. MoveNext () +644 System.Web.Mvc.DefaultModelBinder.OnModelUpdated (ControllerContext controllerContext, ModelBindingContext bindingContext) +92 System.Web.Mvc.DefaultModelBinder.BindComplexElementalModel (ControllerContext controllerContext, ModelBindingContext bindingContext.vc. DefaultModelBinder.BindComplexModel (ControllerContext controllerContext, ModelBindingContext bindingContext) +1048 System.Web.Mvc.DefaultModelBinder.BindModel (ControllerContext controllerContext, ModelBindingContext bindingContext) +280 System.Web.Mvc.Controller. CalculateUpdateModel (modelo de TModel ix, String [] includeProperties, String [] excludeProperties, IValueProvider valueProvider) +449 System.Web.Mvc.Controller. CalculateUpdateModel (modelo TModel) +73

Respuestas a la pregunta(7)

Su respuesta a la pregunta