2017-08-11 50 views
0

我通过Ajax将我的请求发送给控制器, 我想在通过ajax从控制器返回数据时设置Model.CustomerId的数据。 ,这是我的代码从ajax返回数据后为Model.Item设置的值

<script type="text/javascript"> 
    $(document).ready(function() { 

     var lall = $("#Bach").val(); 
     $("#Bach").change(function() { 
      lall = $(this).val(); 

      $.ajax({ 
       type: 'GET', 
       url: '/DatesCheckLists/GetCustomerInfo', 
       data: { id: lall }, 
       contentType: 'application/json; charset=utf-8', 
       datatype: 'json', 
       success: function (data) { 
        $("#customerdata").text(''); 
        $('#customerdata').text(data.Name + " " + data.LastName); 
        @Model.CustomerId = data.Id; 
       } 
      }); 
     }); 
    }); 
</script> 

当我运行该项目,得到一个错误的

@Model.CustomerId = data.Id; 

我的错误是不设置到对象的实例

对象引用。

更新:这是我的控制

public ActionResult GetCustomerInfo(string id) 
    { 
     var cu = db.DatesCustomers.FirstOrDefault(x => x.Code == id); 
     return Json(cu, JsonRequestBehavior.AllowGet); 
    } 
+0

哪个部分给出错误,请问您也可以发布控制器。 – ReadyFreddy

+0

我没有返回值的错误,我想在Model.CustomerId的剃刀视图中设置返回值并更新问题 – sunny

+0

我认为你不能这样做。您可以为此值创建一个'hiddenfor',并将其设置为'success'函数以便发布。您可以更改仅模型值的服务器端,并使用它在客户端创建视图。我可以举一个例子为customerId设置一个'hiddenfor'然后发布它。 – ReadyFreddy

回答

1

可以声明一个客户方隐藏的元素来保存这个ID喜欢

@Html.HiddenFor(m => m.Id) 

和成功的功能,你可以将它像

<script type="text/javascript"> 
$(document).ready(function() { 

    var lall = $("#Bach").val(); 
    $("#Bach").change(function() { 
     lall = $(this).val(); 

     $.ajax({ 
      type: 'GET', 
      url: '/DatesCheckLists/GetCustomerInfo', 
      data: { id: lall }, 
      contentType: 'application/json; charset=utf-8', 
      datatype: 'json', 
      success: function (data) { 
       $("#customerdata").text(''); 
       $('#customerdata').text(data.Name + " " + data.LastName); 
       $('#Id').val(data.Id); 
      } 
     }); 
    }); 
}); 
</script> 

,你可以将它张贴到控制器,并使用它。

我不认为你可以直接从jquery更新你的模型。模型值是关于服务器端,在服务器端声明的,Jquery是用于操纵客户端的。另一个解决方案(T_Row解释了为什么在评论中解释了一个糟糕的解决方案)是将id值发送给另一个使用id更新模型再次发布的控制器。

+1

*另一种解决方案是,将id值发送给另一个控制器,该控制器再次使用id更新后的模型*进行发布,这将需要页面刷新,这违反了AJAX的目的。我认为我们需要看到这个观点来弄清楚OP是什么**真的**试图做 –

+0

因为这个我没有给出任何关于这个方法的例子。这是一个坏主意。 – ReadyFreddy

2

这是不可能的。您正在尝试混合两个概念 - 服务器端视图呈现客户端JavaScript。

@Model.CustomerId = data.Id;在渲染视图时在服务器上进行评估。在AJAX调用时,它不知道在客户端(浏览器)的JS中引入的变量data

如果您想进一步处理data.Id,您可以将其保存到JS变量或隐藏的HTML字段。