在 MVC 剃须刀中更改名称属性会中断模型



我有以下模型:

public class Patient
{
public DateTime DOB { get; set; }
public DateTime DateCreated { get; set; }
[Required] // FullName is required
public string FullName{ get; set; }
public virtual Address Address { get; set; }
}

该地址是相关实体。

public class Address
{
public string Street { get; set; }
...
}

我正在使用 formvalidation.io (formvalidation.io) 来确保字段是必填字段。

此处的片段来自 formvalidation.io 显示了 json 的结构

fields: {
FullName: {
validators: {
notEmpty: {
message: 'The full name is required'
}
}
}...

它按预期工作。

当涉及到我的相关地址实体时,我的自动剃须刀视图是:

@Html.TextBoxFor(x => x.Address.Street, new { @class = "form-control" })

这将创建以下 HTML

<input class="form-control" data-val="true" data-val-required="The Street field is required." id="Address_Street" name="Address.Street" type="text" value="">

因此,我发布了我的表单,除了验证不起作用之外,所有信息都存在,包括相关的"地址"信息。

如果我返回到 formvalidation.io,则无法将字段重命名为以下内容,因为它不是正确的 JSON:

fields: {
**Address.Street**: {
validators: {
notEmpty: {
message: 'The street is required'
}
}
}

所以我更改了 Razor 视图上的"名称"属性,使其如下所示:

@Html.TextBoxFor(x => x.Address.Street, new { @class = "form-control", Name = "Street" })

我已经从我的 formvalidation.io JSON 中删除了"地址",所以我只有与输出 HTML 中的"名称"属性匹配的"街道"。验证一切正常。问题是当我实际使用"地址"元素发布信息时,"地址"元素为空。与地址相关的任何信息都没有发布,感觉我可以通过更改"名称"来使用验证 属性,但没有收到数据,或者我通过获取数据而失去了验证。

我可以同时拥有数据和验证吗?

亲切问候

编辑

我的表单是通过 ajax 提交的。验证成功后,将运行以下 JavaScript:

$.ajax({
type: 'POST',
url: "add",
data: $('#form-validation').serialize(),
dataType: "json",
success: function (resultData) { alert("Save Complete") }
});

虽然Address.Street不是有效的JSON标记,但'Address.Street'是。这应该允许 JSON 正确验证。

您的 JSON 应该看起来像。

fields: {
'Address.Street': {
validators: {
notEmpty: {
message: 'The street is required'
}
}
}

相关内容

  • 没有找到相关文章

最新更新