簡體   English   中英

使用ajax MVC傳遞復雜對象

[英]Pass complex objects using ajax MVC

我有一個包含多個部分的視圖。 我想使用部分視圖和ajax單獨更新部分。

到目前為止我有這個:

控制器:

[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 on View:

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

$(document).on('click touchstart', '#saveDetails', function () {      
        $.ajax({
            type: "POST",
            dataType: 'json',
            data: detailsmodel,
            url: detailsUrl,
            contentType: "application/json"
        }).done(function (res) {
            $("#userDetailsPartial").html(res);
            addresssearch();
        });
    });

模型由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。

為什么我不能只將綁定模型轉換為json

這是因為您使用的是MVC,而不是MVVM。

“約束模型”是通過模型從控制器到視圖的一種方式; 你可能會將術語“綁定模型”與“模型”和“綁定”混合在一起。

如果您發布表單,您將在Action中獲取模型(當然基於參數),但如果您通過ajax傳遞,則需要從表單中獲取當前值(如在評論中創建一個來自輸入的新模型實例')。

您可以通過各種方式生成要通過AJAX傳遞的數據,例如:

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

而不是手動添加每個輸入。

var detailsmodel = JSON.stringify...在生成視圖時設置,並且不會使用MVC自動更改。

這是因為你傳遞的數據是在頁面加載時靜態設置的,基於@Html.Raw(Json.Encode(@Model.userdetails))

您需要使用$form.serialize()類的東西,或者從頁面上的實際字段創建帖子正文。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM