发送表单后构造函数值为空
本文关键字:构造函数 表单 | 更新日期: 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,那么任何类型的验证都应该在类之外完成——可能在服务层中,或者取决于它有多简单,在控制器中。