0

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

所以我有这种模型:

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.Partial ...时,一切都相同且完整,它开始验证客户端,为什么会出现这个问题?任何想法以及如何使其与 editorfor 和客户端验证一起使用?

带有 editorfor 的 HTML 如下所示:

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

带有部分的 Html 如下所示:

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

1 回答 1

0

它直接显示错误,但是现在,它没有显示错误!但在此之前!

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

<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,那么任何类型的验证都应该在类之外完成——可能在服务层中,或者取决于控制器的简单程度。

于 2013-06-02T13:49:47.223 回答