gpt4 book ai didi

c# - 使用局部 View 时不显示表单验证消息

转载 作者:行者123 更新时间:2023-12-05 05:18:39 25 4
gpt4 key购买 nike

我正在开发一个 ASP.NET Core 2.0 应用程序,我在其中创建了一个表单来输入数据。在检查验证是否有效时,我注意到没有为我的 View 模型的必需属性显示验证消息。

当所需输入为空时,我按保存我无法继续,因此需要输入但没有消息可以看到。

我的表单 View 的 View 模型有一个 View 模型列表作为属性,因为部分表单必须动态更改。

这是我的主视图模型:

public class SettingsViewModel
{
public List<KeyValueViewModel> KeyValuePairs { get; set; }
public string Description { get; set; }
}

这是 KeyValueViewModel

public class KeyValueViewModel
{
public int Id { get; set; }
[Display(Name = "Key")]
[Required(ErrorMessage = "Key is required")]
public string Key { get; set; }
[Display(Name = "Value")]
[Required(ErrorMessage = "Value is required")]
public string Value { get; set; }

public Guid SettingFileId { get; set; }
public Dictionary<Guid, string> SettingFileDropdownOptions { get; set; }
}

这是主视图:

@model SettingsViewModel
<form asp-action="Create" id="SettingsForm">
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<div class="row">
<div class="col-md-12">
<label asp-for="@Model.KeyValuePairs[0].Key" class="control-label col-md-3 no-left-padding"></label>
<label asp-for="@Model.KeyValuePairs[0].Value" class="control-label col-md-offset-1 no-left-padding"></label>
</div>
</div>
@for (var i = 0; i < Model.KeyValuePairs.Count; i++)
{
var keyValuePair = Model.KeyValuePairs[i];
keyValuePair.Id = i;
<div id="KeyValuePairsContainer">
@Html.Partial("_settingKeyValue", keyValuePair)
</div>
}
<div class="form-group col-md-12 no-left-padding">
<label asp-for="Description" class="control-label"></label>
<textarea asp-for="Description" class="form-control" ></textarea>
<span asp-validation-for="Description" class="text-danger"></span>
</div>
<div class="form-group col-md-12 no-left-padding">
<input type="submit" value="Opslaan" class="btn btn-primary" id="Submit" />
<a href="@Url.Action("Index", "Home")" class="btn btn-default" id="Cancel">Annuleren</a>
</div>
</form>

这里是渲染的部分 View :

@model KeyValueViewModel
<div class="form-group col-md-4 no-left-padding">
<input asp-for="@Model.Key" class="form-control col-md-3" id="KeyValuePair_Key_@Model.Id" name="KeyValuePairs[@Model.Id].Key" required="required"/>
<span asp-validation-for="@Model.Key" class="text-danger"></span>
</div>
<div class="form-group col-md-4 no-left-padding">
<input asp-for="@Model.Value" class="form-control col-md-3" id="KeyValuePair_Value_@Model.Id" name="KeyValuePairs[@Model.Id].Value" required="required" />
<span asp-validation-for="@Model.Value" class="text-danger"></span>
</div>

Key 和 Value 属性上的验证消息没有在应该显示的时候显示。我们通过添加带有消息的必需标记来测试 SettingsViewModel 的 Description 属性,效果很好。

如何在我的主视图中显示 KeyValueViewModel 的验证消息?

编辑

<span class="text-danger field-validation-valid" data-valmsg-for="Key" data-valmsg-replace="true"></span>

在应该更新的时候没有更新为 class="field-validation-error"

最佳答案

出于某种原因,如果输入具有 name="..." 属性,asp-validation-for 将不起作用。从输入中删除 name 属性可能会解决问题。

这是因为 asp.net 验证本身使用 name 属性,它希望它与 asp-for 中的属性名称相匹配(确切地说,包括第一个大写字母)。

关于c# - 使用局部 View 时不显示表单验证消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47455911/

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