0

私は次のモデルを持っています:

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") }
                });
4

1 に答える 1