2017-08-11 1 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

あなたはそれをコントローラと使用するためにそれを投稿することができ、その後、あなたが

<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> 

ようにそれを設定することができます

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

と成功の機能上のように、このIDを保持するために、クライアント側の隠された要素を宣言することができます。

モデルをjqueryから直接更新することはできません。モデル値はserversideに関するもので、serversideに宣言され、Jqueryはclientsideを操作するためのものです。もう1つの解決策(T_Rowがコメントの理由を説明した悪い悪い解決策)は、idの値をidを更新したモデルで再び投稿する別のコントローラに送ることです。

+1

* idを更新したモデル。*でポストされた別のコントローラにid値を送ることは、AJAXの目的を破るようにページを更新する必要があります。私はOPが**本当に**しようとしていることにいくつかの明確さを得るためにビューを見る必要があると思う。 –

+0

私はこのメソッドについての例を挙げていない。それは悪い悪い考えです。 – ReadyFreddy

2

です。あなたは、クライアント側JavaScriptをレンダリングするサーバー側のビューという2つの概念を混在させようとしています。

@Model.CustomerId = data.Id;は、ビューがレンダリングされるときにサーバー上で評価されます。 AJAX呼び出し時にクライアント側(ブラウザ)のJSに導入された変数dataについて何も知らない。

さらにdata.Idを処理する場合は、JS変数または非表示のHTMLフィールドに保存することができます。

関連する問題