【问题标题】:Parameter in Controller Null After Ajax CallAjax 调用后控制器 Null 中的参数
【发布时间】:2016-04-12 17:33:10
【问题描述】:

这里是场景:

当用户选择 Details 按钮时,JavaScript 函数 getPersonId 会按预期抓取 personId。

出现问题的位置:

选择personId 后,我将Id 发送到ajax 呼叫中。 Id 已通过,但遇到问题:我的成功应该是什么? 并且 传递给控制器​​的 personId 为 null

问题列表:

  1. 向控制器发送参数时 Success 是如何工作的?
  2. C# 参数为空。
  3. 调用 ajax 方法的最佳方式是什么?是否应该在单击详细信息按钮时调用它?

HTML

<div class="col-md-12">
  <table class="table table-striped">
       <thead>
           <tr>
              <th>Name</th>
              <th>Age</th>
              <th>Details</th>
            </tr>
       </thead>
       <tbody>
            @foreach (var viewModel in Model)
            {
                <tr>
                   <td>@viewModel.Name</td>
                   <td>@viewModel.Age</td>
                   <td><button data-id="@viewModel.PersonId" type="button" data-bind="click: getPersonId" class="btn btn-success" data-toggle="modal" data-target="#details-modal"><span class="fa fa-external-link-square"></span> Details</button></td>
                 </tr>
            }
       </tbody>
 </table>
</div>

在 HTML 底部创建 PersonViewModel 实例

<script>
        $(function () {
            window.viewModel = new PersonViewModel().init(@Html.Json(Model));
        });
</script>   

JavaScript

function PersonViewModel() {
    var self = this;

    self.init = function(data) {
        ko.mapping.fromJS(data, {}, self);
        ko.applyBindings(self, $("#tblPerson")[0]);

        return self;
    }

    self.getPersonId = function(vm, ev) {
        var personId = $(ev.target).data('id');
        return personId;
    }

    self.getPersonEntity = function() {
        $.ajax({
            type: "POST",
            url: '/Person/RetrievePersonEntity',
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            data: ko.toJSON(self.getPersonId),
            success: function() {}  // not sure what I need here...
        });
    }
}

C# 控制器

[HttpPost]
public JsonResult RetrievePersonEntity(string personId)
{
    var result = _personOrchestrator.RetrievePersonEntity(personId);

    return Json(result);
}

【问题讨论】:

  • 尝试使用新的 js 对象,例如 var obj={}; obj.personId="1";然后作为数据传递
  • @rashfmnb 我是 js 新手,所以你能扩展一下吗?
  • 我的意思是说不要发送 ko.toJSON(self.getPersonId) 创建新的对象实例,如 var newobj={}; obj.personId=self.getPersonId;然后发送数据:ko.toJSON(newobj)

标签: javascript c# jquery ajax


【解决方案1】:

试试这个:

 self.getPersonEntity = function() {
        $.ajax({
            type: "POST",
            url: '/Person/RetrievePersonEntity?personId=' + self.getPersonId(vm, ev),
            data: ko.toJSON(self.getPersonId),
            success: function() {
                return self.getPersonId
            }  
        });
    }

【讨论】:

    【解决方案2】:

    你可以这样尝试

    self.getPersonEntity = function() {
        $.ajax({
            type: "POST",
            url: '/Person/RetrievePersonEntity' ,
            data: {personId:self.getPersonId(vm, ev)},
            success: function() {
                return self.getPersonId
            }  
        });
    }
    

    【讨论】:

      猜你喜欢
      • 2021-07-01
      • 1970-01-01
      • 2017-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-14
      • 1970-01-01
      相关资源
      最近更新 更多