2017-08-11 52 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字段。