javascript - 在使用 knockout 绑定(bind)的同时使用 AJAX 发布数据

标签 javascript jquery ajax knockout.js

我发现很难通过 Ajax post 向 Controller 发送数据,因为由于我的代码结构,要发送到 Controller 的对象不能在 ajax post 中使用。我正在使用 knockout 进行数据绑定(bind)更新按钮的单击事件。

这是我的代码

 $(document).ready(function () {  
 var provider = function () {
var self = this;
self.providerID = ko.observable(providerEditInfo.ProviderID);
self.firstName = ko.observable(providerEditInfo.FirstName);
self.lastName = ko.observable(providerEditInfo.LastName);
self.contactEmail = ko.observable(providerEditInfo.ContactEmail);
self.NPI = ko.observable(providerEditInfo.NPI);

self.updateProviderDetails = function () {
    $.ajax({
        url: "/Provider/UpdateProviderDetails/",
        type: "POST",
        data: { providerForUpdate }, -- Cant send this
        contentType: "application/json; charset=utf-8",
        async: false,
        success: function (result) {
            if (result.url) {
                location.href = result.url;
            }
        }
    });
};

self.cancelEdits = function () {
    if (confirm("Are you sure you want to Cancel?")) {
        window.location.href = "/Provider/ShowTheListOfProviders";
      }
   };
}; //End of Constructor.

var providerForUpdate = new provider();
ko.applyBindings(providerForUpdate);
 });
On the clck of Update Button,I am calling the 'updateProviderDetails' method.

HTML

  @model Greenway.Demo.DataAccess.Entity.Provider
<body>
<div class="container">
<h1 class="col-sm-offset-2">Edit Provider Details:</h1>
<br />
<form class="form-horizontal" role="form" id="editProviderDetailsForm">
    <div class="form-group">
        <label class="col-sm-2 control-label labelfont">First Name:</label>
        <div class="col-sm-6">
            <input type="text" class="form-control" autofocus="autofocus" placeholder="Enter the First Name" id="firstName" name="firstName" data-bind="value:firstName , event: { keypress: allowOnlyAlphabets }">
        </div>
    </div>

    <div class="form-group">
        <label class="col-sm-2 control-label labelfont">Last Name:</label>
        <div class="col-sm-6">
            <input type="text" class="form-control" placeholder="Enter the Last Name" id="lastName" name="lastName" data-bind="value:lastName ,event: { keypress: allowOnlyAlphabets }">
        </div>
    </div>

   <div class="form-group text-center">
        <button type="Submit" data-bind="click: updateProviderDetails" class="btn btn-primary">Update</button>
        <button type="button" data-bind="click: cancelEdits" class="btn btn-primary">Cancel</button>
    </div>
</form>
</div>
  </body>
  <script type="text/javascript">
       var providerEditInfo = @Html.Raw(Json.Encode(Model));
  </script>
  <script type="text/javascript" src="../../App_Scripts/Shared/Functions.js"></script>

有人可以指导我如何使用此代码结构将数据发送到 Controller 。我不能将 updateProviderDetails 放在构造函数之外,否则我无法绑定(bind)它。

最佳答案

使用ko.toJSON将 View 模型序列化为json:

self.updateProviderDetails = function () {
    $.ajax({
        url: "/Provider/UpdateProviderDetails/",
        type: "POST",
        data: ko.toJSON(self),
        contentType: "application/json; charset=utf-8",
        async: false,
        success: function (result) {
            if (result.url) {
                location.href = result.url;
            }
        }
    });
};

这也在 Knockout Tutorial

关于javascript - 在使用 knockout 绑定(bind)的同时使用 AJAX 发布数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28462262/

相关文章:

javascript - Worklight 将登录凭据传递给 iframed 服务器端内容

javascript - 如何在用户每次返回主页时停止播放背景视频?

jquery - 一段时间间隔后的 Keyup 事件

jquery html 未在 getJSON 函数范围内传递回 html 变量问题

javascript - 选择表中行或列中的单选按钮

javascript - D3 - 无法访问 IF 语句中的 d.length

javascript - 验证字数统计 tinymce

jquery - Hammers.js 和桌面触摸事件

Django 中的 Jquery : Which django apps should I look into?

javascript - 根据 Ajax GET 请求将复选框设置为选中