asp.net 将 json 发布到控制器

Posted

技术标签:

【中文标题】asp.net 将 json 发布到控制器【英文标题】:asp.net post json to controller 【发布时间】: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 发生,那么您肯定知道问题出在您的客户端脚本上。 【参考方案1】:

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

ko.observable(new ProductViewModel());

你应该把它改成:

ko.applyBindings(new ProductViewModel());

【讨论】:

以上是关于asp.net 将 json 发布到控制器的主要内容,如果未能解决你的问题,请参考以下文章

无法在 asp.net 核心中使用 ajax 将 json 发布到控制器

如何将带有 JSON、jQuery 的复杂对象数组发布到 ASP.NET MVC 控制器?

将 JSON 从视图发送到控制器 ASP.NET MVC 会给出空值

将json发送到控制器时,ASP.NET mvc 4控制器参数始终为空,为啥?

无法将 JSON 数据发送到 asp.net MVC 控制器中的另一个操作

ASP.NET Core MVC - 将 HTML 表转换为 json 并使用 ajax 发送到控制器