2016-07-07 4 views
0

In meinem Controller, die Methode, die die Ansicht zurück, initialisiert auch einige Werte für einige Klasse-Niveau Eigenschaften:Wert immer zurückgesetzt zwischen Ajax-Aufrufen in Controller-

private string igc = String.Empty; 
private string igcCode = String.Empty; 
private bool isSuggested = false; 

public ActionResult Codes(Codes objCodes) 
{ 
    try 
    { 
     FillDropDowns(objCodes); 
     igc = String.Empty; 
     if (objICDCodes.FromWhere.IndexOf("MedicalInfo-Suggested") >= 0) 
     { 
      igc = objCodes.FromWhere.Remove(0, "MedicalInfo-Suggested-".Length); 
      igcCode = igc.Substring(0, igc.IndexOf("-")).Trim(); 
      objCodes.ICGCode = igcCode; 
      isSuggested = true; 
     } 
    } 
    catch (Exception ex) 
    { 
     //logging error 
     ElmahLogUtility.ErrorException(ex); 
    } 

    return View(base.GetViewPath("Codes"), objCodes); 
} 

Zusätzlich gibt diese Methode, die aufgerufen wird, binden von Daten an ein Gitter auf der Seite:

public JsonResult GetSelectedCodesInfo(List<SearchField> searchFields, GridDataSourceRequest request) 
{ 
    //creating the instance of DataSourceResult. 
    DataSourceResult dataSourceResult = null; 
    try 
    { 
     // Creating the instance of CommonBLL to load the values. 
     CommonBLL objCommonBLL = new CommonBLL(); 

     if (isSuggested) 
     { 
      searchFields.Add(new SearchField() { ElementName = "aIGCode", Value = igcCode }); 
      searchFields.Add(new SearchField() { ElementName = "aFor", Value = "EtiologicDiagnosis" }); 
     } 

     // Getting the Codes information and storing in the DataSource Result. 
     dataSourceResult = objCommonBLL.GetSelectedCodesInfo(searchFields, request); 
    } 
    catch (Exception ex) 
    { 
     //Logging the Exception 
     ElmahLogUtility.ErrorException(ex); 
    } 

    // Returning the Result. 
    return Json(dataSourceResult, JsonRequestBehavior.AllowGet); 
} 

isSuggested auf true gesetzt wird, wenn die Ansicht erstellt wird, aber wenn die Daten an das Netz gebunden ist isSuggested wird auf false aus irgendeinem Grunde.

My Gitter so ist wie in einem Rasiermesser Ansicht definiert:

@Html.Grid("CodesSelectionGrid").ReadSource("Controller", "GetSelectedCodesInfo").OnGridDataBound("AssignCodeValues").Lazyload(true).EnableGrouping(false).EnableSorting(true).PageSize(10).Height("390px").Width("610px").EnablePaging(true).EnableFiltering(false).EnableMultiSelect(true).SelectionMode(SelectionMode.Single, "GetSelectedCodeDetails").RowSelection(GridRowSelection.None).ShowToolBar(true).SelectionCSSClass("icd-editable-cell").PageButtonCount(3) 

.ReadSource("Controller", "GetSelectedCodesInfo") Das Bit ist, was an den Controller und das Verfahren bezieht sich auf die Steuerung zu rufen. Also, es ruft das zweite Codefragment oben auf.

Ich muss auf zwei separate Instanzen meiner Klasse Controller zugreifen, aber ich weiß nicht, wie ich dieses Problem lösen kann. Wie kann ich das machen? Wie könnte ich mein Gitter eine Referenz des Objekts übergeben lassen? Dann könnte ich nur die Werte von dort für das Raster bekommen ...

Antwort

1

Dies ist das erwartete Verhalten. isSuggested ist eine Variable auf Klassenebene. Jedes Mal, wenn Sie eine HTTP-Anforderung ausführen, wird eine neue Instanz Ihres Controllers erstellt. Das bedeutet, dass die Variable auf false initialisiert wird. Denken Sie daran, Http ist statusless :)

Wenn Sie einen variablen Wert zwischen mehreren http-Aufrufe beibehalten möchten, müssen Sie es beibehalten. Sie haben verschiedene Möglichkeiten, wie

  1. zu einer Datenbanktabelle Persist und von dem in dem zweiten Anruf
  2. Schreiben in eine Datei in der Scheibe und von dem in dem zweiten Aufruf
  3. Speicher In der Benutzersitzung lesen lesen und lesen von dem im zweiten Anruf
+0

Danke; Ich vermutete, dass dies Absicht war. Ich wusste einfach nicht, wie ich damit umgehen sollte. Ich werde es wahrscheinlich einfach in eine Session-Variable werfen, wie Sie es vorgeschlagen haben. Ich werde deine Antwort akzeptieren, wenn das funktioniert. – sab669

+0

Nun, Ihre Lösung hat mein Problem gelöst ... hat aber leider eigene Probleme. Trotzdem danke! – sab669

+0

4. Führen Sie es über versteckte Felder mit einem HTTP-Post hin und her, ähnlich wie ViewState in asp.net arbeitete. –

Verwandte Themen