MVC服务器端的RadioButton和DropDownList验证

时间:2019-05-16 15:01:47

标签: c# .net asp.net-mvc asp.net-core razor

使用ASP.NET Core 2.2剃刀页面,我正在探索将单选按钮和下拉列表绑定到页面模型。

许多人都在询问客户端验证以“使其正常工作”。

我的问题是:当我看这段代码时。绑定引擎是否正在进行服务器端检查?

@foreach (var gender in Model.Genders)
{
    <input type="radio" asp-for="Gender" value="@gender" id="Gender@(gender)" /> @gender
}

@Html.DropDownListFor(x => x.Country, new List<SelectListItem>
{
    new SelectListItem() {Text = "Canada", Value="CA"},
    new SelectListItem() {Text = "USA", Value="US"},
    new SelectListItem() {Text = "Mexico", Value="MX"}
})  

是什么导致某人无法发布性别“ bababa”和国家/地区“ xxx”,而这可能导致我的代码和数据库出现未定义的行为?

如果上面的代码正在执行这样的验证(如果我错了,请纠正我),我会感到惊讶,并且因为每个人都在询问客户端验证,所以找不到有关此问题的帖子。

这里推荐的方法是什么?

2 个答案:

答案 0 :(得分:0)

服务器端和客户端验证很重要,您始终需要实施服务器端验证,也许可以省略客户端验证,但从不进行服务器端验证,您发布的代码不会执行任何服务器端验证

答案 1 :(得分:0)

请问一下我自己的优雅解决方案,因为我什么都没找到。

在下面的帮助程序类中,我将以此声明我的模型

pull

在我的页面上插入单选按钮和下拉列表

[BindProperty]
public InputList Gender { get; set; } = new InputList(new[] { "Man", "Woman" });

[BindProperty]
public InputList Country { get; set; } = new InputList(new NameValueCollection()
{
    { "", "--Select--" },
    { "CA", "Canada" },
    { "US", "USA" },
    { "MX", "Mexico" }
});

瞧瞧!验证在客户端和服务器端均有效,确保发布的值有效。

当然,可以将“男人”和“女人”移动到常量中,并且可以将国家/地区列表移动到一个单独的类中,该类为整个应用程序生成一次。

这是InputList助手类。

@foreach (var item in Model.Gender.ListItems)
{
    <input type="radio" asp-for="Gender.Value" value="@item.Value" id="Gender@(item.Value)" /><label for="Gender@(item.Value)" style="padding-right:15px;"> @item.Text </label>
}
<span asp-validation-for="Gender" class="text-danger"></span>

@Html.DropDownListFor(x => x.Country.Value, Model.Country.ListItems)
<span asp-validation-for="Country" class="text-danger"></span>