[英]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; }
或兩者皆有?
還是我完全錯了,我還必須做其他事情? 正如我說的那樣,我無法對其進行測試,因為必須將軟件發送出去進行測試,否則我將嘗試各種解決方法。
從評論中總結我們的討論。
您問題的示例視圖模型
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.