当 ViewModel 是(具有)集合时,是否可以将 ViewModel 属性与匹配的 ModelState.Key 值匹配?
示例:要编辑视图模型项的集合,我使用的是在此处找到的扩展。
这会将 GUID 添加到页面上字段的 id 中。
例子:
class Pets
{
string animal;
string name;
}
对于 Pets 列表,生成的 html 源代码如下:
<input name="Pets.index" autocomplete="off" value="3905b306-a9..." type="hidden">
<input value="CAT" id="Pets_3905b306-a9...__animal" name="Pets[3905b306-a9...].animal" type="hidden">
<input value="MR. PEPPERS" id="Pets_3905b306-a9...__name" name="Pets[3905b306-a9...].name" type="hidden">
<input name="Pets.index" autocomplete="off" value="23342306-b4..." type="hidden">
<input value="DOG" id="Pets_23342306-b4...__animal" name="Pets[23342306-b4...].animal" type="hidden">
<input value="BRUTICUS" id="Pets_23342306-b4...__name" name="Pets[23342306-b4...].name" type="hidden">
因此,当它在 post 上绑定时,ModelState 会加载所有表单字段。在 ModelSTate.Keys 中,有:
Pets[23342306-b4...].name
Pets[23342306-b4...].animal
Pets[3905b306-a9...].name
Pets[3905b306-a9...].animal
到目前为止一切都很好,但是我正在做一些业务逻辑验证,例如,如果存在同名的动物,则无法添加新动物。在这种情况下,我希望能够突出显示错误的输入字段。
因此,如果我的 create 函数失败,它将返回一个错误/键值对,如下所示:
{ error = "Duplicate Name", key="name" }
所以我至少现在会是什么属性导致了这个问题。
但是由于我的存储库函数不知道视图字段 id,我如何将键“名称”与适当的 ModelState 键匹配(在这种情况下,Pets[23342306-b4...].name 或 Pets[3905b306 -a9...].name)?