【问题标题】:Posting to ASP.NET MVC Controller from Knockout从 Knockout 发布到 ASP.NET MVC 控制器
【发布时间】:2011-12-08 20:44:12
【问题描述】:

我正在尝试理解 knockout.js。目前,我正在尝试对我的 JSON 对象到达控制器的 MVC 控制器进行 POST。有人知道在线可下载的代码示例吗?我似乎找不到任何可以证明这一点的代码。我在此处显示的视频中看到了它:http://channel9.msdn.com/Events/MIX/MIX11/FRM08。但是,我目前的方法是给我一个 404。我怀疑这与我如何序列化某些东西有关。因此,我正在寻找一个例子。

谢谢!

【问题讨论】:

  • 我想通了。我没有正确映射我的路线:(

标签: 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。

【讨论】:

    猜你喜欢
    • 2013-01-13
    • 1970-01-01
    • 2013-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多