2

我的问题:

首先,我有一个搜索表单,用户在其中输入条件并将请求发送到适当的控制器索引操作。用户输入作为我创建的模型类型传入,只是为了保存数据。我将模型返回到视图中,然后在呈现视图之前,我使用 jquery 获取视图模型数据,并且我有一个 knockout.js/ajax 将“数据”发布到一个 jsonresult 操作,其中发生搜索过滤然后我更新使用 json 数据和敲除数据绑定的视图。

我的 jsonresult 操作需要一个用于表排序的字符串 sortByText(works) 和一个 ViewModel。但是当发生 ajax 调用时,我的 jsonresult 操作无法识别数据对象传递的值。

如何将“SearchFormModel”正确传递到 JSONresult 操作中?

AJAX

'self.options.formModel' 保存 Index 操作发送的我的数据;在调试时,我看到它有数据,但在下一步中没有发布到 jsonresult 操作,只有 sortByText。ajax 'data:' 只能识别字符串和 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

4 回答 4

1

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

于 2013-02-22T05:04:06.280 回答
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"
  })

希望我没有走错方向。

于 2013-02-22T05:45:50.593 回答
1

有时您必须从序列化的 Form 对象中提取数据。我有一篇关于这个的帖子,其中包含代码。您正在寻找的部分大约是一半,标题为“POST 数据的问题”。

于 2013-02-25T14:45:25.857 回答
0

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

于 2013-02-24T04:31:56.853 回答