Per*_*rcy 4 c# asp.net 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; }
}
Run Code Online (Sandbox Code Playgroud)
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; }
}
Run Code Online (Sandbox Code Playgroud)
运行Fortify 扫描会将以下问题作为高优先级返回:
(ASP.NET MVC 不良实践:具有必需属性的可选子模型)
我们无法运行强化扫描 - 它正在由其他人运行,所以我需要正确进行更改,这样它就不会直接返回。
我查看过的所有资源都表明可以进行底层攻击 - 即 null Language,即使Language具有一些必需的属性。
Language对我来说,这是一个有效的场景 -仅当不为空时才需要的必需属性Language。
那么我应该怎么做才能解决这个问题呢?我是否要求public int LanguageId { 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; }
}
Run Code Online (Sandbox Code Playgroud)
在你看来你可以使用
@Html.DropDownListFor(x => x.CompanyId, Model.Companies);
Run Code Online (Sandbox Code Playgroud)
你的标签将是国家/地区,你只需回发你需要的内容
| 归档时间: |
|
| 查看次数: |
6033 次 |
| 最近记录: |