【问题标题】:Posting to ASP.NET MVC Controller from Knockout从 Knockout 发布到 ASP.NET MVC 控制器
【发布时间】:2011-12-08 20:44:12
【问题描述】:
【问题讨论】:
标签:
javascript
knockout.js
【解决方案1】:
除了使用 ko.mapping 插件首先解包模型之外,执行此任务的敲除确实没有什么特别之处。
在这个 sn-p 中,我将对象 searchParams 发布到 Search/ExecuteSearch。这里使用 jQuery,
var jsonString = ko.mapping.toJSON(this.searchParams);
$.ajax({
url: "/Search/ExecuteSearch",
data: jsonString,
type: 'POST',
contentType: 'application/json',
dataType: 'json',
success: this.setSearchResults.bind(this)
});
这是控制器动作:
/// <summary>
/// Execute a search
/// </summary>
/// <param name="search"></param>
/// <returns></returns>
[HttpPost]
public JsonResult ExecuteSearch(AdvertisementSearch search)
{
var searchExecutor = new SearchExecutor();
return Json(searchExecutor.ExecuteSearch(search, CustomerData));
}
这里重要的是,您的 JS 模型必须具有与您的 MVC 控制器操作所期望的 .NET 对象相同的属性名称,否则 MVC 模型绑定将不起作用。我喜欢的一种设计模式是将我的 JS 模型作为 .NET POCO 对象进行管理,然后将它们的空默认版本序列化到客户端。这意味着我不必担心保持 JS 文件和我的 .NET CLR 对象同步。
我还应该提到我正在使用 MVC 3。