Ajax和MVC将类对象发布到控制器

时间:2013-02-22 04:21:41

标签: asp.net-mvc json jquery knockout.js

我的问题:

首先,我有一个搜索表单,用户输入标准,并将请求发送到正确的控制器索引操作。用户输入作为我创建的模型类型传入,仅用于保存数据。我将模型返回到视图中,然后在渲染视图之前我使用jquery获取View Model数据,并且我有一个knockout.js / ajax将'data'发布到jsonresult操作,其中搜索过滤发生然后我更新使用json数据和knockouts数据绑定的视图。

我的jsonresult操作采用字符串sortByText(有效)进行表排序和ViewModel。但是当发生ajax调用时,我的jsonresult操作无法识别数据对象传递的值。

如何正确地将'SearchFormModel'传递给JSONresult操作?

AJAX

'self.options.formModel'保存由Index操作发送的数据;在调试时,我看到它有数据,但它没有在下一步中发布到jsonresult操作,只有sortByText。 ajax'数据:'只识别字符串和int?

     $.ajax({
        type: 'POST',
        url: Url,
        data: { sortByText: selectedText, formModel: self.options.formModel },
        dataType: "json"
      })....etc

控制器

    [HttpGet]     
    public ActionResult Index(string sortByText, SearchFormModel formModel)
    {
        var model = new SearchViewModel();
        model.FormModel = formModel;

        return View(model);
    }

    [HttpPost]
    public JsonResult GetData(string sortByText, SearchFormModel formModel)
    {

        //return jsonData
    }

4 个答案:

答案 0 :(得分:1)

使用ko.toJS(self.options.formModel())将observableArray转换为json对象

答案 1 :(得分:1)

尝试使用: -

$.ajax({
    type: 'POST',
    url: Url,
    data: ko.toJSON({ sortByText: selectedText, formModel: self.options.formModel }),
    dataType: "json"
  })

其次,可能听起来不合时宜: - 您的SearchFormModel有

[JsonObject(MemberSerialization.OptIn)]
public class SearchFormModel 
{

    [JsonProperty("id")]
    public string Id{ get; set; }

}

或者您可以在模型类中包含sortByText: -

[JsonObject(MemberSerialization.OptIn)]
public class SearchFormModel 
{

    [JsonProperty("id")]
    public string Id{ get; set; }
    [JsonProperty("sortByText ")]
    public string SortByText { get; set; }

}

你的AJAX就像: -

    $.ajax({
    type: 'POST',
    url: Url,
    data: ko.toJSON(self.options.formModel),
    dataType: "json"
  })

希望我的方向不错。

答案 2 :(得分:1)

有时您必须从序列化的Form对象中提取数据。我有a post about this代码可用。您正在寻找的部分大约是“POST数据问题”的一半。

答案 3 :(得分:0)

我最终传递字符串和整数而不是传递对象不起作用。