在Controller中的ajax调用之间重置值

时间:2016-07-07 19:22:20

标签: c# ajax asp.net-mvc razor

在我的控制器中,返回View的方法也会为某些类级属性初始化一些值:

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);
}

此外,还有一种方法可以调用将数据绑定到页面上的网格:

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设置为true,但当数据绑定到网格isSuggested由于某种原因设置为false时。

我的网格在Razor视图中定义如下:

@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")位是指控制器和控制器上要调用的方法。所以,它正在调用上面的第二段代码。

我必须访问我的Controller类的两个单独的实例,但我不知道如何解决这个问题。我怎样才能做到这一点?我怎么能让我的网格传递Codes对象的引用?然后我可以从网格中获取值......

1 个答案:

答案 0 :(得分:1)

这是预期的行为。 isSuggested是一个类级变量。每次发出Http请求时,都会创建一个新的控制器实例。这意味着变量将初始化为false。请记住, Http是无状态的:)

如果要在多个http调用之间保留变量值,则需要保留它。你有不同的选择,如

  1. 坚持到数据库表并在第二次调用中读取
  2. 写入磁盘中的文件,并在第二次调用中读取该文件
  3. 保存到用户会话并在第二次调用中读取