gpt4 book ai didi

c# - DropDownListFor 用于验证有问题的复杂模型

转载 作者:太空宇宙 更新时间:2023-11-03 17:03:30 25 4
gpt4 key购买 nike

我在输入表单中有其他字段和下拉列表。他们都验证得很好。即使没有正确验证前端的两个元素仍然可以在帖子中正确地建模绑定(bind)。我不完全确定他们为什么不验证。这是设置:

View 模型

public class DataVM
{
//Widgets used, populated from database
public List<Widget> Widgets { get; set; }

//Contains data to populate a dropdown with
public GenericSelectList Containers { get; set; }

//This will hold the relation between the widget and container
//where widget is the local id, and container foreign id
public List<NestedDictionary> WidgetContainers { get; set; }
}

public class NestedDictionary
{
[RegularExpression("/^[1-9][0-9]*$/")]
[Required]//This is not being enforced
public int? ForeignId { get; set; }

public int LocalId { get; set; }
}

查看

@for (int i = 0; i < Model.Widgets.Count; i++)
{
@Html.Hidden("WidgetContainers["+i+"].LocalId", Model.Widgets.ElementAt(i).WidgetId)
<div>
<div>
<span>Container Used</span><hr />
</div>
<div class="editor-field">
@Html.DropDownListFor(
m => m.WidgetContainers.ElementAt(i).ForeignId,
new SelectList(
Model.Containers.Values,
"Id",
"DisplayFields",
0
),
" - Select A Container - "
)
<br />@Html.ValidationMessageFor(model => model.WidgetContainers.ElementAt(i).ForeignId)
</div>
</div>
}

一切都显示得很好。它是交互式的,并且值是正确的。发布时,正确的数据被传递到正确的位置。但是,如果没有选择 Container,则可以正常发布帖子,并传递 0 值。有点不知所措。有什么想法为什么验证在客户端不起作用?

编辑

这是隐藏输入和选择元素的呈现 html

隐藏:

<input id="WidgetContainers_0__LocalId" type="hidden" value="39" name="WidgetContainers[0].LocalId">

选择:

<select name="ForeignId" id="ForeignId" class="valid">

很明显,select 应该定义不同的属性。

编辑 #2

如果我用

m => m.WidgetContainers[i].ForeignId,

然后我得到

<select id="WidgetContainers_0__ForeignId" name="WidgetContainers[0].ForeignId" class="valid">

最佳答案

因为它根本不是空的。如果您希望客户端验证正常工作,您应该允许 ForeignId 为 null 而不是 0并且当您首先创建 DropDown 时

new SelectList(
Model.Containers.Values,
"Id",
"DisplayFields",
0 // Don't set this default value
)

关于c# - DropDownListFor 用于验证有问题的复杂模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13905584/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com