0

私は最近、本当に奇妙な問題に遭遇しましたが、それが機能する前に言及したいのですが、多くの変更を行ったので、アプリが少し壊れたので、少し再起動する必要がありましたが、まだこれがあります奇妙な行動、基本的に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 が呼び出されますが、国 ID が入力され、空として表示されます!!! 以前はそうではありませんでしたが、少しねじ込む前に、コンストラクターが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 が呼び出されますが、国 ID が入力され、空として表示されます!!! 以前はそうではなかったこと

これは私には意味がありません。オブジェクトが作成された後CountryIdにのみ設定できます(コンストラクターに渡されない限り、そうではありません)。したがって、コンストラクター、設定する前に呼び出す必要があります。とにかく、この種のコードは正しくないようです。これが ViewModel である場合、あらゆる種類の検証は、実際にはクラスの外部で実行する必要があります。おそらく、サービス レイヤーで、またはその単純さに応じて、コントローラーで実行する必要があります。CountryId

于 2013-06-02T13:49:47.223 に答える