更改 MVC 剃刀中的名称属性,破坏模型
Changing Name attribute in MVC razor, breaks Model
我有以下型号:
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="">
所以,我 post 编辑了我的表格,所有信息都存在,包括相关的 'Address' 信息,除了验证不起作用。
如果我返回 formvalidation.io,我无法将我的字段重命名为以下内容,因为它不正确 JSON:
fields: {
**Address.Street**: {
validators: {
notEmpty: {
message: 'The street is required'
}
}
}
所以我更改了 Razor 视图上的 "Name" 属性,使其看起来像这样:
@Html.TextBoxFor(x => x.Address.Street, new { @class = "form-control", Name = "Street" })
我已经从 formvalidation.io JSON 中删除了 'Address.',所以我只有 'Street' 与输出的 'Name' 属性匹配=62=]。验证一切正常。问题是当我实际使用 post 信息时,'Address' 元素为空。 None 的地址相关信息得到了 posted,感觉我可以通过更改 'Name' 来使用验证
元素上的属性但没有收到数据,或者我通过获取数据失去了验证。
我可以同时拥有数据和验证吗?
亲切的问候
编辑
我的表单是通过 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'
}
}
}
我有以下型号:
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="">
所以,我 post 编辑了我的表格,所有信息都存在,包括相关的 'Address' 信息,除了验证不起作用。
如果我返回 formvalidation.io,我无法将我的字段重命名为以下内容,因为它不正确 JSON:
fields: {
**Address.Street**: {
validators: {
notEmpty: {
message: 'The street is required'
}
}
}
所以我更改了 Razor 视图上的 "Name" 属性,使其看起来像这样:
@Html.TextBoxFor(x => x.Address.Street, new { @class = "form-control", Name = "Street" })
我已经从 formvalidation.io JSON 中删除了 'Address.',所以我只有 'Street' 与输出的 'Name' 属性匹配=62=]。验证一切正常。问题是当我实际使用 post 信息时,'Address' 元素为空。 None 的地址相关信息得到了 posted,感觉我可以通过更改 'Name' 来使用验证 元素上的属性但没有收到数据,或者我通过获取数据失去了验证。
我可以同时拥有数据和验证吗?
亲切的问候
编辑
我的表单是通过 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'
}
}
}