Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 过帐表单后,构造函数值为空_C#_Asp.net Mvc 3_Validation_Model - Fatal编程技术网

C# 过帐表单后,构造函数值为空

C# 过帐表单后,构造函数值为空,c#,asp.net-mvc-3,validation,model,C#,Asp.net Mvc 3,Validation,Model,我最近遇到了一个非常奇怪的问题,虽然只是想在它工作之前提一下,但我做了很多更改,现在我的应用程序有点糟糕,所以我不得不重新启动一点,但我仍然有这种奇怪的行为,基本上有两件事,但我认为它们是相互关联的 所以我有这种模型: public class MyModel { [Required] public string Username{ get; set; } public UserLocation Location { get; set; } }

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

所以我有这种模型:

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,我不知道为什么,但是我在构造函数中的代码总是被激发,但现在不是了

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

知道出了什么问题吗

更新:

这是我的编辑器模板,这是它的样子,正如你们所看到的,我有一个validateion消息

<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>

@LabelFor(m=>m.CountryId)
@DropDownListFor(m=>m.CountryId,Model.Countries,“--select--”,null)
@Html.ValidationMessageFor(m=>m.CountryId)
更新2:关于验证

所以我有@Html.EditorFor。。。当我将它改为@Html.Partial时,它没有验证客户端。。。在一切都相同且完好无损的情况下,它开始验证客户端,为什么会出现这样的问题?有什么想法,以及如何让它与editorfor和客户端验证一起工作

带有editorfor的HTML如下所示:

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

包含部分内容的Html如下所示:

<select name="Location.CountryId" id="Location_CountryId">
<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>

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


这对我来说没有意义,
CountryId
只能在创建对象后设置(除非它被传递到构造函数中,而构造函数不是)。因此,必须在设置
CountryId
之前调用构造函数。这种类型的代码似乎无论如何都不正确,如果这是一个ViewModel,任何类型的验证都应该在类之外进行——可能是在服务层中,或者取决于控制器的简单程度。

if(CountryId!=null)
在构造函数中是没有意义的,因为在构建对象时它总是
null
。你到底想在那里实现什么?这很奇怪,但在它在构造函数中工作之前,我有值,因为它是httppost,不知怎的,我在那里得到了值,我可以做一些额外的事情,比如填写其他列表之类的。是不是我使用的是editorFor而不是html.partial?你错了,viewmodel不应该进行自我验证。问题的核心错误在于构造函数中似乎存在验证风格的代码。大部分viewmodel验证都应该通过属性来处理,其他任何内容都应该通过自定义验证方法来处理。没有任何内容都是正确的,因为视图中的其他字段都是在required@PeterLaCombJr. 视图模型不应该自我验证,这是验证器的工作,数据注释可以帮助它完成这项工作。视图模型的观点是向/从一个视图传输信息,就是这样。一般来说,它不应该有任何类型的业务逻辑,但是,如果它与视图模型相关,那么它们在其中的一些代码中是无害的。一个模型仅仅验证自己是没有意义的,因为模型的状态可以被视为“有效”的,这取决于它的使用方式。是的,我只是想在字段不为空时填充一些列表,所以我不应该一直在控制器中这样做。@Alnedru“我只是想在字段不为空时填充一些列表”-IMO这应该在服务器端完成(例如控制器/服务层)。