繁体   English   中英

在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="">

因此,我张贴了我的表格,除了验证不起作用之外,所有信息都存在,包括相关的“地址”信息。

如果返回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中的“名称”属性匹配的“街道”。 验证一切正常。 问题是当我实际使用张贴信息时,“地址”元素为null。 没有与地址有关的信息被发布,感觉像我可以通过更改元素上的“名称”属性来使用验证,但不接收数据,或者我通过获取数据而丢失了验证。

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

亲切的问候

编辑

我的表格是通过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'
            }
        }
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM