2016-11-30 1 views
2

Там нагрузки ресурсов для этого на Google, но я не могу полностью понять, что мне нужно сделать в моем случае:ASP.NET MVC Вредные практики: Дополнительный Суб с требуемым свойством

У меня есть этот класс:

public class CompanyLanguage : EntityBase 
{ 
    public int CompanyId { get; set; } 
    public int LanguageId { get; set; } 
    public bool IsDefault { get; set; } 


    public virtual Company Company { get; set; } 
    public virtual Language Language { get; set; } 
} 

Language определяется как:

public class Language:EntityBase 
{ 
    [Required] 
    [DisplayName("Language Code")] 
    public string LanguageCode { get; set; } 

    [Required] 
    [MaxLength(2, ErrorMessage ="2 characters maximum")] 
    [DisplayName("2 Char Language Code")] 
    public string LanguageCode2Char { get; set; } 

    [Required] 
    [DisplayName("Language Name")] 
    public string LanguageName { get; set; } 

    public virtual List<LabelLanguage> LabelLanguages { get; set; } 
} 

Забегая Fortify Scan возвращает выпуск ниже в качестве первоочередной задачи:

(ASP.NET MVC Вредные практики: Дополнительный Суб с требуемым свойством)

Мы не можем запустить Fortify сканирование - это время выполнения кем-то еще, так что мне нужно, чтобы получить изменения вправо так, он не возвращается прямо.

Все ресурсы, на которые я смотрел, предполагают, что могут быть сделаны атаки подпольной атаки, т. Е. Нуль Language, хотя Language имеет некоторые требуемые свойства.

Для меня это действительный сценарий - требуемые свойства Language требуются только в том случае, если Language не имеет значения.

Итак, что я должен сделать, чтобы решить эту проблему? Нужно ли делать public int LanguageId { get; set; }, или public virtual Language Language { get; set; } или оба?

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

+0

Итак, вы отправляете эту ef-объект непосредственно в представление без модели просмотра? – Fran

+0

Я - я читал, что я действительно должен использовать модели просмотра, но моя модель представления в буквальном смысле была бы точно такой же, как у сущности, которая вроде бы добавляет намного больше кода и обслуживания для не слишком высокой награды. Как вы думаете? – Rick

+2

хорошо вознаграждение - это разделение проблем и более чистый код. Поскольку вы отправляете объект объединения «много ко многим» в представление, вам, вероятно, не нужна вся эта информация. было бы замечательно видеть действия представления и контроллера, чтобы увидеть, что вы делаете, но я предполагаю, что у вас есть выпадающие списки для компании и языка.Если это так, единственное, что нужно для возврата к представлению, - это списки идентификаторов и описаний для каждого из выпадающих и неполных ef-объектов. – Fran

ответ

3

Подведите итог нашей дискуссии из комментариев.

  1. Создайте модель представления, которая моделирует только информацию, необходимую для соответствия соответствующему виду.
  2. модели с населением в вашем контроллере от вашего домена ef модели
  3. либо проект непосредственно в поле зрения моделей с использованием запросов linq, либо Automapper.

Пример вид модели для вашего вопроса

public class CompanyLanguageEditViewModel 
{ 
    [DisplayName("Company")] 
    [Required] 
    public int CompanyId { get; set; } 

    [DisplayName("Language")] 
    [Required] 
    public int LanguageId { get; set; } 
    public bool IsDefault { get; set; } 

    public IEnumerable<SelectListItem> Companies{ get; set; } 
    public IEnumerable<SelectListItem> Languages { get; set; } 
} 

А на ваш взгляд, вы можете использовать

@Html.DropDownListFor(x => x.CompanyId, Model.Companies); 

и этикетку будет страна, и вы только собираетесь POST обратно то, что вы

+0

Определенно, как мне следовало уйти! В качестве быстрого исправления, чтобы решить эту проблему, будет создан 'public virtual Language Language {get; задавать; } 'Требуемая работа свойства? Это верно? Как я уже сказал, я не могу попробовать и посмотреть, как я не выполняю тест. Время короткое, и все эти изменения в ViewModel означают, что они не соответствуют крайнему сроку. – Rick

+0

Как это поможет вам решить вашу проблему? Вы все еще передаете ef-модель вашему представлению. Также виртуальность не нужна. Этот виртуальный, так что ef может вернуть прокси-объект для ленивой загрузки. И я уверен, что если вы помечаете язык по мере необходимости, все требуемые свойства языка потребуются при отправке – Fran

+0

. Исходная проблема заключается в том, что подмодель (язык) имеет требуемые свойства, хотя язык является необязательным в CompanyLanguage , Поэтому я бы предположил, что требуемый язык необходим, решит проблему? – Rick

Смежные вопросы