私は次のモデルを持っています:
public class Patient
{
public DateTime DOB { get; set; }
public DateTime DateCreated { get; set; }
[Required] // FullName is required
public string FullName{ get; set; }
public virtual Address Address { get; set; }
}
アドレスは関連エンティティです。
public class Address
{
public string Street { get; set; }
...
}
フィールドが必須であることを確認するために、formvalidation.io (formvalidation.io)を使用しています。
formvalidation.io のスニペットは、json の構造を示しています。
fields: {
FullName: {
validators: {
notEmpty: {
message: 'The full name is required'
}
}
}...
これは期待どおりに機能しています。
関連する Address エンティティに関して言えば、自動剃刀ビューは次のとおりです。
@Html.TextBoxFor(x => x.Address.Street, new { @class = "form-control" })
次のHTMLを作成します
<input class="form-control" data-val="true" data-val-required="The Street field is required." id="Address_Street" name="Address.Street" type="text" value="">
そのため、フォームを投稿しましたが、検証が機能しないことを除けば、関連する「アドレス」情報を含むすべての情報が存在します。
formvalidation.io に戻ると、正しい JSON ではないため、フィールドの名前を次のように変更できません。
fields: {
**Address.Street**: {
validators: {
notEmpty: {
message: 'The street is required'
}
}
}
そこで、Razor ビューの "Name" 属性を次のように変更しました。
@Html.TextBoxFor(x => x.Address.Street, new { @class = "form-control", Name = "Street" })
「住所」を削除しました。私のformvalidation.io JSONから、出力されたHTMLの「名前」属性に一致する「ストリート」があります。すべてが検証で正常に動作します。問題は、実際に情報を投稿するときに、「Address」要素が null であることです。アドレスに関連する情報が何も投稿されない、要素の「名前」属性を変更することで検証を使用できるように感じますが、データを受信しないか、データを取得して検証を失います。
データと検証の両方を取得できますか?
敬具
編集
私のフォームは ajax 経由で送信されます。検証が成功すると、次の JavaScript が実行されます。
$.ajax({
type: 'POST',
url: "add",
data: $('#form-validation').serialize(),
dataType: "json",
success: function (resultData) { alert("Save Complete") }
});