私は最近、本当に奇妙な問題に遭遇しましたが、それが機能する前に言及したいのですが、多くの変更を行ったので、アプリが少し壊れたので、少し再起動する必要がありましたが、まだこれがあります奇妙な行動、基本的に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">