簡體   English   中英

ASP.NET MVC不良做法:具有必需屬性的可選子模型

[英]ASP.NET MVC Bad Practices: Optional Submodel With Required Property

Google上有很多資源可以解決此問題,但我無法完全理解我在這種情況下需要做的事情:

我有這個課:

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掃描會將以下問題列為高度優先事項:

(ASP.NET MVC不良做法:具有必需屬性的可選子模型)

我們無法運行強化掃描-它正在由其他人運行,因此我需要正確進行更改,這樣它就不會立即返回。

我看過的所有資源都表明可以進行發布不足的攻擊-即null Language ,即使Language具有某些必需的屬性。

對我來說,這是一個有效的方案-所需要的特性Language ,如果只需要Language不為空。

那么我應該怎么做才能解決這個問題? 我是否要public int LanguageId { get; set; } public int LanguageId { get; set; } public int LanguageId { get; set; } ,或使用public virtual Language Language { get; set; } public virtual Language Language { get; set; } public virtual Language Language { get; set; }或兩者皆有?

還是我完全錯了,我還必須做其他事情? 正如我說的那樣,我無法對其進行測試,因為必須將軟件發送出去進行測試,否則我將嘗試各種解決方法。

從評論中總結我們的討論。

  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);

並且您的標簽將是“國家/地區”,而您只需要回發您所需要的內容

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM