2017-09-07 5 views
0

Ich habe zwei Teilansichten in der übergeordneten Ansicht. In der übergeordneten Ansicht gibt es ein "div" -Tag, das eine Teilansicht namens "state" enthält.Dropdown-Wert ist nicht nach dem Laden einer Teilansicht ausgewählt

<div id="divState"></div></td> 

Die Teilansicht hat nur ein DDL drin:

@Html.DropDownList("State", null, "---------- Select ----------", htmlAttributes: new { @class = "form-control" }) 

Die Teilansicht wie unten wird geladen:

$('#divState').load('@Url.Action("LoadState", "General")'); 

Controller-Code ist wie unten:

[HttpGet] 
     public ActionResult LoadState() 
     { 
      if (Request.IsAjaxRequest()) 
      { 
       ViewBag.State = new SelectList(db.Generals, "IID", "Value"); 
       return PartialView("_State"); 
      } 
      else 
      { 
       return null; 
      } 
     } 

Ich habe einen Link-Button, der öffnet eine modale Dialogbox, die eigentlich eine Teilansicht ist. Die Teilansicht enthält ein paar Felder und eine Schaltfläche zum Speichern von Daten. Nach dem Speichern wird der Wert im Zustand DDL mit dem zuletzt eingegebenen Wert angezeigt. Ich habe die folgende jQuery geschrieben, um den zuletzt eingefügten Wert zu speichern und auszuwählen.

Nach dem Einfügen Wert wird in der DDL angezeigt, wie ich die Teilansicht neu laden, die die DDL enthält. Aber mein Problem ist, dass der zuletzt eingefügte Wert nicht ausgewählt ist. DDL zeigt das erste Listenelement nach dem Flashen des letzten Einfügedatensatzes an (d. H. Es ist fest als "5" codiert).

Jede Hilfe wird zum Glück angenommen. Partha

+1

Was ist dein Element mit 'id =" btnSave "'? –

+0

"btnSave" ist eigentlich die Schaltfläche Speichern in der Teilansicht, die ein paar Felder enthält. Diese Werte werden in der Datenbank gespeichert und auch in der DDL gespeichert (auch innerhalb einer Teilansicht, d.h. "Zustand"). Die gespeicherten Werte kehren über json vom Controller zurück. Werte werden durch ein Javascript erfasst, das bereits vergeben ist. – Partha

+0

Typ ist "Knopf". – Partha

Antwort

0

Ajax-Aufrufe sind asynchron, und Ihre $("div#divState select").val("5"); Codezeile wird ausgeführt, bevor die .load()-Funktion abgeschlossen wurde.

Sie müssen den Wert der <select> in dem Erfolg Rückruf

success: function (response) { 
    ... 
    $('#divState').load('@Url.Action("LoadState", "General")', function() { 
     // set value in the callback (after the DOM has been updated) 
     $("div#divState select").val("5"); 
    }); 
}, 

jedoch setzen, sein unklar, warum Sie einen Ajax-Aufruf machen die <select> wieder zu ersetzen. Wenn der erste Ajax-Anruf Daten in Ihre Generals Tabelle speichert, so dass Sie die Optionen aktualisieren müssen, dann sollte der erste Anruf die IID und Value in Ihrem JsonResult zurückgeben, und dann können Sie einfach ein neues <option> Element erstellen und anhängen existierend <select>

+0

Ich verwende eine Teilansicht und keine Ajax-Form . Elternformular wird später gespeichert. Ich benutze keine Ajax-Form. Wie kann ich den Erfolgsrückruf in Teilansicht aufrufen? Ich aktualisiere die Teilansicht neu, da eine Order-by-Klausel die Sequenz aufrecht erhält. – Partha

+0

Wer sagt, dass du eine Ajax-Form benutzt hast? Und Sie können es trotzdem mit Javascript bestellen. Hast du überhaupt den richtigen Code, den ich dir gegeben habe, probiert? - Sie ersetzen nur den Code in Ihrem bestehenden 'Erfolg: Funktion (Antwort) {...}' mit dem Code in meiner Antwort –

+0

Es funktioniert. Danke vielmals. – Partha

Verwandte Themen