2017-01-23 14 views
2

複数のセクションがあるビューがあります。部分的なビューとajaxを使って個別にセクションを更新したいと思います。ajax MVCを使用して複雑なオブジェクトを渡す

私はこれまでのところ、これを持っている:

コントローラー:

[HttpPost] 
public PartialViewResult userdetailssettings(UserDetails model) 
{ .... } 

ビューHTML:

<div id="userDetailsPartial"> 
    @Html.Partial("_user_details", Model.userdetails)   
</div> 

部分HTML:ビューの

<div class="form-group"> 
    <div class="col-md-12"> 
     @Html.TextBoxFor(x => x.Forename, new { @class = "form-control", placeholder = "Enter your forename" }) 
     @Html.ValidationMessageFor(x => x.Forename) 
    </div> 
</div> 
<div class="form-group"> 
    <div class="col-md-12"> 
     @Html.TextBoxFor(x => x.Surname, new { @class = "form-control", placeholder = "Enter your surname" }) 
     @Html.ValidationMessageFor(x => x.Surname) 
    </div> 
</div> 

Javascriptを:

モデルはajaxによってコントローラに渡されますが、値は入力の値ではありません。これらは、ビューを開くためにコントローラから渡された元の値です。

私はタグで部分的な部分をラップしてみましたが、部分的に部分的にフォームタグを追加しようとしました。私もこのコードを入れて試してみました

:クリック機能インサイド

var detailsUrl = "@Url.Action("userdetailssettings", "UserLogin")"; 
var detailsmodel = JSON.stringify(@Html.Raw(Json.Encode(@Model.userdetails))); 

入力から更新された値を渡すものはありません。

私はjavascriptのすなわち

var detailsmodel = [ { Forename: $('#Forename').val(), Surname: $('#Surname').val() } ]; 

に入力からモデルの新しいインスタンスを作成すると考えている。しかし、私はちょうどJSONを作成していた場合、なぜ私はJSONにバインドされたモデルを変換することはできません。

+0

*「MVCではなくMVCを使用しているため、なぜバインドされたモデルをjsonに変換できないのですか」*あなたの「束縛されたモデル」は、コントローラからモデルを通したビューへの一方向です。あなたは、 "束縛されたモデル"という言葉を "モデル"と "束縛"と混同しています。フォームをPOSTした場合、モデルが取得されますが、ajax経由で渡す場合は、フォームから現在の値を取得する必要があります(コメントの '入力からモデルの新しいインスタンスを作成する場合と同じです)。あなたの 'var detailsmodel = JSON.stringify ...'はビューが生成されたときにセットされ、変更されません。 –

+0

ありがとうございます。私はモデルの新しいインスタンスを作成するために貪欲にします。あなたがあなたのコメントを答えたら、私は受け入れます。再度、感謝します。 –

答えて

3

なぜ私はちょうどあなたがMVC、ないMVVMを使用しているためです

をJSONにバインドされたモデルを変換することはできません。

「バインドされたモデル」は、コントローラからモデルを通したビューへの一方向です。 「束縛されたモデル」という言葉と「モデル」と「束縛」という言葉を混ぜて使うことも可能です。

フォームをPOSTした場合は、アクションのパラメータ(もちろんパラメータに基づいています)を取得しますが、ajax経由で渡す場合はフォームの現在の値を取得する必要があります「入力からモデルの新しいインスタンスを作成する」というコメント)。

次のような様々な方法でAJAXを介して通過するデータを生成することができる:

var data = $("form").serialize(); 

ではなく、手動ですべての入力を追加すること。

var detailsmodel = JSON.stringify...ビューが生成されたときに設定され、MVCを使用して自動的に変更されません。

1

これは、渡すデータがページロード時に静的に設定されているためです(@Html.Raw(Json.Encode(@Model.userdetails))に基づいています)。

$form.serialize()のようなものを使用するか、ページ上の実際のフィールドから投稿本文を作成する必要があります。

関連する問題