【问题标题】:asp.net post json to controllerasp.net 将 json 发布到控制器
【发布时间】:2016-05-28 11:00:55
【问题描述】:

当我单击“保存”按钮时,没有任何反应,并且 SaveProducts 控制器中的断点没有响应。为什么?我知道它需要实现 jsondeseralize 因为 product 应该为 null。

HomeController.cs

public class HomeController : Controller
{
    //
    // GET: /Home/

    public ActionResult Index()
    {
        return View();
    }

    public ActionResult SaveProducts(ProductModel product)
    {
        return View("Index");
    }

}

索引.cshtml

@{
ViewBag.Title = "Index";
}
<script src="~/Scripts/knockout-2.2.0.js"></script>
<h2>Index</h2>
<div data-bind="with: currentProduct">
<p>Name: <input type="text" data-bind="value: productName" /></p>
</div>
<input type="button" value="Save" data-bind="click: saveProduct" />

<script>

function ProductViewModel() {
    var self = this;
    self.currentProduct = ko.observable(new Product("P1"));
    self.saveProduct = function () {
        var productModel = ko.toJS(self.currentProduct);
        ko.utils.postJson("/Home/SaveProducts", {product: productModel} );
    }
}
function Product(name) {
    var self = this;
    self.productName = ko.observable(name);
}
ko.observable(new ProductViewModel());

</script>

ProductModel.cs

public class ProductModel
{
    public string productName { get; set; }
}

【问题讨论】:

  • 接受的答案看起来不错,但只是对未来的提示;当您遇到此类问题时,请使用浏览器开发工具 (F12) 并查看网络选项卡和控制台。如果您单击按钮并没有看到 POST 发生,那么您肯定知道问题出在您的客户端脚本上。

标签: javascript c# json asp.net-mvc knockout.js


【解决方案1】:

我在您的代码中看不到您激活绑定的位置,我认为在这一部分中您的意思是激活它而不是创建可观察对象。

ko.observable(new ProductViewModel());

你应该把它改成:

ko.applyBindings(new ProductViewModel());

【讨论】:

    猜你喜欢
    • 2016-11-06
    • 1970-01-01
    • 1970-01-01
    • 2012-01-25
    • 2016-07-05
    • 1970-01-01
    • 2017-06-22
    • 2012-10-03
    • 2015-05-02
    相关资源
    最近更新 更多