Ошибка Платформы объекта при представлении пустых полей

Два “overloads” не находятся в том же объеме. По умолчанию компилятор только рассматривает самый маленький объем имени, пока это не находит соответствие имени. Аргумент, соответствующий, сделан впоследствии . В Вашем случае это означает, что компилятор видит B::DoSomething. Это тогда пытается соответствовать списку аргументов, который перестал работать.

Одним решением была бы к выпадающему перегрузка от A в B объем:

class B : public A {
public:
    using A::DoSomething;
    // …
}
6
задан Ruben Bartelink 25 November 2009 в 10:01
поделиться

2 ответа

Вы привязываетесь напрямую к сущности? Конечно, похоже. Таким образом, у вас есть два варианта:

  1. Написать настраиваемый связыватель модели, который переводит null -> пустую строку.
  2. Привязать к модели редактирования, которая позволяет вместо этого использовать null, а затем изменить это на пустую строку, когда вы копируете значения в объект в действии.

Я бы выбрал №2 лично. Я думаю, вы всегда должны использовать модели просмотра / редактирования, и это отличный пример того, почему.

8
ответ дан 8 December 2019 в 13:46
поделиться

Это проблема с MVC2 и Entity Framework 4 или это задумано? Похоже, что проверка свойств EF отлично работает для полей datetime, не допускающих значения NULL (обязательных), а проверка типа данных числовых полей по сравнению со строковыми работает без использования ViewModels.

Я воссоздал проблему, используя простую таблицу FOOBAR, используя единственный столбец varchar (50), не допускающий значения NULL, с именем barName в slq 2008. Я сгенерировал модель EF из этой базы данных и быстро добавил контроллер и представление CREATE для ФУБАР сущность. Если я попытаюсь выполнить POST для действия CREATE, не вводя значение для свойства barName, VS перейдет к исключению в файле модели designer.cs (точно так же, как указано выше). Когда я пытаюсь обойти исключение, в форме появляется сообщение о проверке, а поле выделяется розовым цветом.

Похоже, что-то стреляет не в правильной последовательности. Поскольку исключение возникает до того, как VS перейдет к методу HTTPPOST CREATE.

Я нашел полезным код из примера ASP.Net MvcMusicStore. http://mvcmusicstore.codeplex.com/releases/view/44445#DownloadId=119336

Похоже, привязка к ViewModel решает проблему.

namespace MvcMusicStore.ViewModels
{
    public class StoreManagerViewModel
    {
        public Album Album { get; set; }
        public List<Artist> Artists { get; set; }
        public List<Genre> Genres { get; set; }
    }
}
........

namespace MvcMusicStore.Models
{
    [MetadataType(typeof(AlbumMetaData))]
    public partial class Album
    {
        // Validation rules for the Album class

        [Bind(Exclude = "AlbumId")]
        public class AlbumMetaData
        {
            [ScaffoldColumn(false)]
            public object AlbumId { get; set; }

            [DisplayName("Genre")]
            public object GenreId { get; set; }

            [DisplayName("Artist")]
            public object ArtistId { get; set; }

            [Required(ErrorMessage = "An Album Title is required")]
            [StringLength(160)]
            public object Title { get; set; }

            [DisplayName("Album Art URL")]
            [StringLength(1024)]
            public object AlbumArtUrl { get; set; }

            [Required(ErrorMessage = "Price is required")]
            [Range(0.01, 100.00, ErrorMessage="Price must be between 0.01 and 100.00")]
            public object Price { get; set; }
        }
    }
}
2
ответ дан 8 December 2019 в 13:46
поделиться
Другие вопросы по тегам:

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