我的问题:
首先,我有一个搜索表单,用户输入标准,并将请求发送到正确的控制器索引操作。用户输入作为我创建的模型类型传入,仅用于保存数据。我将模型返回到视图中,然后在渲染视图之前我使用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
}
答案 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)
我最终传递字符串和整数而不是传递对象不起作用。