0

オブジェクトの一部として ko.observable 配列を投稿しようとしていますが、null ではないがカウントがゼロの配列を除いて、すべてのデータがサーバーに到達します。

これはクライアント側にあります

    function submitAsync() {
    var viewModel = constructModel();

    setTimeout(function () {
        $.ajax({
            url: '/Article/Index',
            type: 'POST',
            data: JSON.stringify({ viewModel: viewModel }),
            contentType: 'application/json; charset=utf-8',
        })
    },2000);
    console.log(viewModel);
}

function constructModel(){
    var articleViewModel = {};
    articleViewModel.Authors = ko.toJSON(appViewModel.authors);

    articleViewModel.ArticleData = {};
    articleViewModel.ArticleData.Title = $("#ArticleData_Title").text();
    articleViewModel.ArticleData.CorespondingAuthor = $("#ArticleData_CorespondingAuthor").text();
    articleViewModel.ArticleData.Keywords = $("#ArticleData_Keywords").text();

    articleViewModel.ArticleContent = {};
    articleViewModel.ArticleContent.Abstract = $("#ArticleContent_Abstract").text();
    articleViewModel.ArticleContent.FullText = ArticleContent();

    return articleViewModel;
}

私のビューモデル

public class ArticleViewModel
{
    public ArticleData ArticleData { get; set; }
    public ArticleContent ArticleContent { get; set; }
    public ICollection<Author> Authors { get; set; }
}

私のコントローラーアクションviewModel.Authorsはnullではありませんが、カウントは0です

[HttpPost]
        public ActionResult Index(ArticleViewModel viewModel)
        {
            if (ModelState.IsValid)
            {
                mergeViewModelToCurrentArticle(viewModel);
                _documentPath = GenerateDocument(_currentArticle);
                return RedirectToAction("Success");
            }
            return View();
        }

javascript から出力された ko 配列

Authors: "[{"id":1,"firstName":"User first name","lastName":"user last name","email":"user@gmail.com","phone":"xxxxx","address":"Dunarii Nr.3","fullName":"user full name"}]"
4

2 に答える 2

1

単に交換する

articleViewModel.Authors = ko.toJSON(appViewModel.authors);

と:

articleViewModel.Authors = appViewModel.authors;

あなたは必要のないAuthors配列をエンコードするダブルJSONです。

于 2013-03-17T17:38:49.940 に答える
1

Darinのおかげで、どうやら解決策は交換することだったようです。

articleViewModel.Authors = ko.toJSON(appViewModel.authors); 

articleViewModel.Authors = $.parseJSON(ko.toJSON(appViewModel.authors))
于 2013-03-21T02:02:52.480 に答える