发送表单后构造函数值为空

本文关键字:构造函数 表单 | 更新日期: 2023-09-27 18:16:47

我最近遇到了非常奇怪的问题,虽然只是想在它工作之前提到,但我做了很多改变,现在我的应用有点搞糟了,所以我不得不重新启动一点,但我仍然有这种奇怪的行为,基本上有2件事,但我认为它们是相互关联的!

所以我有这样的模型:

public class MyModel
{
        [Required]
        public string Username{ get; set; }
        public UserLocation Location { get; set; }
}

用户位置为:

public class UserLocation
    {
        public UserLocation()
        {
            if (CountryId != null)
            {
                //do something
            }
        }
        [Required]
        public string CountryId { get; set; }
...
}

所以在我看来,我有这个正确构建与编辑器模板,当什么都没有填写,它直接显示了一个错误,但现在,它不怎么错误!但在那之前!

其次,当我点击一个按钮,所以一个httppost方法被触发,首先构造函数UserLocation被调用,但是countryID被填充,它显示为空!!之前的情况并非如此,在我拧了一点之前,构造函数被httppost调用,值被设置,就像国家id,我不知道为什么,但我的代码在构造函数总是被触发,但不再。

设置的值,在调试中我可以看到它!

你知道出了什么问题吗?

更新:

这是我的编辑器模板,这就是它的样子,正如你所看到的,我有

的验证消息
<tr>
    <td class="editor-label">
        @Html.LabelFor(m => m.CountryId)
    </td>
    <td class="editor-field">
        @Html.DropDownListFor(m => m.CountryId, Model.Countries, "---select--", null)
    </td>
    <td>
        @Html.ValidationMessageFor(m => m.CountryId)
    </td>
</tr>

更新2:关于验证

我有@Html。EditorFor……当我将其更改为@Html时,它没有验证客户端。部分……在一切都保持不变的情况下,它开始验证客户端,为什么会出现这个问题?有什么想法和如何使它与编辑器和客户端验证一起工作吗?

HTML与editorfor看起来像这样:

<select name="Location.CountryId" id="Location_CountryId">

部分的Html是这样的:

<select name="CountryId" id="CountryId" data-val-required="The Country field is required." data-val="true">

发送表单后构造函数值为空

直接显示错误,但现在,它不显示错误!但在那之前!

听起来你可能已经禁用了客户端验证-检查以确保你已经包含验证脚本,即

<script src="/Scripts/jquery.validate.js"></script>
<script src="/Scripts/jquery.validate.unobtrusive.js"></script>

并在web.config

中启用选项
<appSettings>
    <add key="ClientValidationEnabled" value="true"/> 
    <add key="UnobtrusiveJavaScriptEnabled" value="true"/> 
</appSettings>

其次,当我点击一个按钮,所以一个httppost方法被触发,首先构造函数UserLocation被调用,但是countryID被填充,它显示为空!!以前的情况并非如此

这对我来说没有意义,CountryId只能在对象创建之后设置(除非它被传递给构造函数,但它不是)。因此,构造函数必须在设置CountryId之前调用。这类代码看起来不太对,如果这是一个ViewModel,那么任何类型的验证都应该在类之外完成——可能在服务层中,或者取决于它有多简单,在控制器中。