0

IEnumerableのモデルにバインドしたグリッドコントロールがあります。ただし、コントローラーにレコードを保存したいと思います。私が使用しているグリッドコントロールは、Telerikの「剣道」のものです。リクエストバックは文字列であり、バインドされたオブジェクト'CustomerViewModel'を取得したいのですが、オブジェクトを渡すとnullが返されます。さまざまな種類の情報を試しましたが、渡したいプロパティを指定した場合にのみ機能するようです。以下のコードを見つけて支援してください。

[AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Save([DataSourceRequest] DataSourceRequest request, CustomerViewModel customerViewModel)
        {
            if (customerViewModel != null && ModelState.IsValid)
            {
                var customers = Repository.GetItems<Customer>();
                Repository.SaveChanges<Customer, CustomerViewModel, NorthWindDataContext>(customers, customerViewModel);
            }
            return Json(ModelState.ToDataSourceResult());
        }
4

1 に答える 1

2

オブジェクトがクエリ文字列に埋め込まれている場合、MVC は常にそれを文字列として認識します。

次のようにする必要があります。

    public ActionResult Save(string customerViewString)
    {
        var jsonSerializer = new JavaScriptSerializer();
        var customerViewModel = jsonSerializer.Deserialize<CustomerViewModel>(customerViewString);
        if (customerViewModel != null && ModelState.IsValid)
        {
            var customers = Repository.GetItems<Customer>();
            Repository.SaveChanges<Customer, CustomerViewModel, NorthWindDataContext>(customers, customerViewModel);
        }
        return Json(ModelState.ToDataSourceResult());
    }

私は、コンテンツ タイプを JSON に設定できる Ajax Get または Post を実行できない、似たようなことに苦労しています。クエリ文字列でそれを行う方法はないようです(これは単なる文字列として意味があります)。

コントローラーでデシリアライズすることが唯一の選択肢のようです。これを行うためのきちんとした方法を示すことができる誰かから聞いてみたい.

于 2013-05-07T05:38:37.243 に答える