2017-08-11 4 views
0

Ich sende meine Anfrage an den Controller von Ajax, Ich möchte Daten für Model.CustomerId setzen, wenn Daten von Controller von Ajax zurückgeben. und dies ist mein CodeSet-Wert für Model.Item nach Rückkehr Daten von AJAX

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

, wenn ich das Projekt ausführen, auf einen Fehler

@Model.CustomerId = data.Id; 

mein Fehler

Objektverweis nicht auf eine Instanz eines Objekts festgelegt.

Update: Das ist meine Kontrolle

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

Welcher Teil gibt Fehler und Sie können auch Controller bitte posten. – ReadyFreddy

+0

Ich habe keinen Fehler von Rückgabewert, ich will gesetzt Rückgabewert in der Rasierer-Ansicht für Model.CustomerId und Update-Frage – sunny

+0

Ich glaube nicht, dass Sie das tun können. Sie können für diesen Wert einfach einen 'hiddenfor' machen und ihn in' success' -Funktion setzen, wenn Sie möchten. Sie können den Modellwert nur serverseitig ändern und damit Ansichten auf der Clientseite erstellen. Ich kann ein Beispiel geben, um ein 'hiddenfor' für customerId zu setzen und es dann zu veröffentlichen. – ReadyFreddy

Antwort

1

Sie ein client versteckt Element deklarieren können diese ID wie

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

und auf Erfolgsfunktion halten Sie es wie

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

danach einstellen können Sie es schreiben, um es der Steuerung und zu verwenden .

Ich glaube nicht, dass Sie Ihr Modell direkt von jquery aktualisieren können. Modellwerte beziehen sich auf die Serverseite, die auf der Serverseite deklariert wird, und Jquery dient zur Manipulation der Clientseite. Eine andere Lösung (eine schlechte schlechte Lösung wie T_Row erklärte, warum auf Kommentare) ist, dass id Wert an einen anderen Controller gesendet wird, die erneut mit ID aktualisiert Modell.

+1

* Eine andere Lösung ist, dass der ID-Wert an einen anderen Controller gesendet wird, der erneut mit der ID aktualisiertes Modell. * Repliziert, was eine Seitenaktualisierung erfordern würde, die den Zweck von AJAX vereitelt.Ich denke, wir müssen die Ansicht sehen, um Klarheit darüber zu bekommen, was das OP wirklich versucht * –

+0

Deshalb gab ich kein Beispiel über diese Methode. Es ist eine schlimme schlechte Idee. – ReadyFreddy

2

Es ist nicht möglich. Sie versuchen, zwei Konzepte zu mischen - serverseitige Ansicht, die ein clientseitiges JavaScript rendert.

@Model.CustomerId = data.Id; wird auf dem Server ausgewertet, wenn die Ansicht gerendert wird. Es weiß nichts über data Variable in der JS auf Client-Seite (Browser) eingeführt, wenn der AJAX-Aufruf erfolgt.

Wenn Sie data.Id weiter verarbeiten möchten, können Sie es in eine JS-Variable oder in ein verstecktes HTML-Feld speichern.

Verwandte Themen