Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么我在后端C#上创建的对象变为空_C#_Asp.net_Ajax - Fatal编程技术网

为什么我在后端C#上创建的对象变为空

为什么我在后端C#上创建的对象变为空,c#,asp.net,ajax,C#,Asp.net,Ajax,我使用asp.net和c#作为后端代码,在前端使用html、javascript/jquery 用户单击网站上的“详细信息”以查看和编辑以前创建的请求 jquery/ajax在后端调用方法以获取有关请求的信息。 将创建一个对象newWaferRequest来保存此信息。对象从ajax调用返回,站点用该信息填充表单。然后,用户可以编辑表单、向请求添加新程序、修改现有请求信息等 我遇到的问题是,当用户选择“savePgm”时,ajax调用后端savePgm方法,该方法应该更新之前创建的对象newWa

我使用asp.net和c#作为后端代码,在前端使用html、javascript/jquery

用户单击网站上的“详细信息”以查看和编辑以前创建的请求

jquery/ajax在后端调用方法以获取有关请求的信息。 将创建一个对象newWaferRequest来保存此信息。对象从ajax调用返回,站点用该信息填充表单。然后,用户可以编辑表单、向请求添加新程序、修改现有请求信息等

我遇到的问题是,当用户选择“savePgm”时,ajax调用后端savePgm方法,该方法应该更新之前创建的对象newWaferRequest,但我收到一个nullReferenceException。异常指向newWaferRequest对象为null。这发生在用户更新请求的不同时间。有时,用户可以通过后端的正确响应更新程序并添加新程序。其他情况下会发生异常

在使用web时,我不能完全掌握变量是如何“存储”的。我在这里读了多篇文章,并且读过关于会话和视图状态变量的文章。我尝试在一个会话中保存该对象,但没有成功

这只是我的c代码的开始,我最初尝试使用静态变量。所有对象都在App_代码cs文件中

public partial class Nbump_Request : System.Web.UI.Page
{
//public static person currentPerson = new person();
//public static requestSearch searchRequest;
//public static waferRequest newWaferRequest;
//public static waferRequestObject newWaferRequestObject;

static person currentPerson = new person();
static requestSearch searchRequest;
static waferRequest newWaferRequest;
static waferRequestObject newWaferRequestObject;
下面是用于现有请求的ajax方法,它创建对象

[WebMethod]
public static string queryRequestExisting(string request_pk)
{
    JavaScriptSerializer js = new JavaScriptSerializer();
    try
    {
        newWaferRequest = new waferRequest(request_pk, "EXISTINGREQUEST");
        newWaferRequestObject = newWaferRequest.CURRENTREQUEST;
        string json = js.Serialize(newWaferRequest);
        return json;
    }
    catch (Exception)
    {
        return null;
    } 
}
以下是用户保存或更新程序信息的ajax代码。我在代码中添加了检查并返回的对象为null

public static string savePgmData(Dictionary<string, string> pgm_requests)
{
    PgmRequestObject currentPgm;
    if (newWaferRequest != null)
    {
        try
        {
            //if (!Convert.ToBoolean(pgm_requests["pgmEdit"])) //not performed when request pgm being edited
             string rtnMessage;
            //create new pgm in waferRequest object
            if (pgm_requests["PGMRT_INDEX_PK"] == null)
            {
                int index = newWaferRequest.addNewPGMRequest() - 1;
                currentPgm = (PgmRequestObject)newWaferRequest.PGMREQUESTLIST[index];
                string pgmPrimaryKey = currentPgm.PGMRT_INDEX_PK;
                rtnMessage = "{\"message\": \"Added and saved new pgm successfully\", \"primaryKey\":\"" + pgmPrimaryKey + "\"}";
            }
            //get pgm to update at index provided
            else if (pgm_requests["pgmRowIndex"] != "-1")
            {
                int index = Convert.ToInt32(pgm_requests["pgmRowIndex"]);
                currentPgm = (PgmRequestObject)newWaferRequest.PGMREQUESTLIST[index];
                rtnMessage = "Edited and saved pgm successfully";
            }
            //save initial pgm
            else
            {
               currentPgm = (PgmRequestObject)newWaferRequest.PGMREQUESTLIST[0];
               rtnMessage = "Initial pgm added successfully";
            }
 
 
            currentPgm.updatePGM(pgm_requests["pgmNameList"], pgm_requests["pgmNameText"]);
            currentPgm.updateStatus(pgm_requests["pgmStatus"]);
            currentPgm.updateWafers(pgm_requests["pgmWfrList"], pgm_requests["pgmWfrNum"]);
            currentPgm.updatePriority(pgm_requests["pgmTestOrder"]);
            currentPgm.updateFailBinRetest(pgm_requests["pgmFbr"], pgm_requests["pgmFbrBins"]);
            //currentPgm.CommitIntoDatabase(); // -- Called on individual requests updates before request saved
 
            return rtnMessage;
        }
        catch (Exception ex)
        {
            return "Failed to save program\n\n" + ex.Data + "\n" + ex.Message + "\n" + ex.StackTrace + "\n";
        }
    }
    else
    {
        return "newWaferRequest object is null\n";
    }
}
下面是一个我在会话中尝试的示例。我去掉了静态变量,修改了方法

[WebMethod(EnableSession=true)]
public static string queryRequestExisting(string request_pk)
{
    waferRequest newWaferRequest;
    waferRequestObject newWaferRequestObject;

    JavaScriptSerializer js = new JavaScriptSerializer();
    try
    {
        newWaferRequest = new waferRequest(request_pk, "EXISTINGREQUEST");
        newWaferRequestObject = newWaferRequest.CURRENTREQUEST;

        HttpContext.Current.Session["newWaferRequest"] = newWaferRequest;
        HttpContext.Current.Session["newWaferRequestObject"] = newWaferRequestObject;

        string json = js.Serialize(newWaferRequest);
        return json;
    }
    catch (Exception)
    {
        return null;
    } 
}


//snippet of savePgmData with session 
public static string savePgmData(Dictionary<string, string> pgm_requests)
{
    waferRequest newWaferRequest = HttpContext.Current.Session["newWaferRequest"];

    PgmRequestObject currentPgm;
    if (newWaferRequest != null)
    {
        try
        {
            //if (!Convert.ToBoolean(pgm_requests["pgmEdit"])) //not performed when request pgm being edited
             string rtnMessage;
            //create new pgm in waferRequest object
            if (pgm_requests["PGMRT_INDEX_PK"] == null)
            {
                int index = newWaferRequest.addNewPGMRequest() - 1;
                currentPgm = (PgmRequestObject)newWaferRequest.PGMREQUESTLIST[index];
[WebMethod(EnableSession=true)]
公共静态字符串queryRequestExisting(字符串请求\u pk)
{
waferRequest newWaferRequest;
waferRequestObject新建waferRequestObject;
JavaScriptSerializer js=新的JavaScriptSerializer();
尝试
{
newWaferRequest=新的waferRequest(请求主键,“EXISTINGREQUEST”);
newWaferRequestObject=newWaferRequest.CURRENTREQUEST;
HttpContext.Current.Session[“newWaferRequest”]=newWaferRequest;
HttpContext.Current.Session[“newWaferRequestObject”]=newWaferRequestObject;
字符串json=js.Serialize(newWaferRequest);
返回json;
}
捕获(例外)
{
返回null;
} 
}
//带有会话的savePgmData片段
公共静态字符串savePgmData(字典pgm_请求)
{
waferRequest newWaferRequest=HttpContext.Current.Session[“newWaferRequest”];
PgmRequestObject当前PGM;
if(newWaferRequest!=null)
{
尝试
{
//如果(!Convert.ToBoolean(pgm_请求[“pgmEdit”])//在编辑请求pgm时未执行
字符串RTN消息;
//在waferRequest对象中创建新的pgm
如果(pgm_请求[“PGMRT_索引_PK”]==null)
{
int index=newWaferRequest.addNewPGMRequest()-1;
currentPgm=(PgmRequestObject)newWaferRequest.PGMREQUESTLIST[索引];
由于工作安全原因,我只能显示代码。如果需要更多信息,请告诉我


此外,代码在我的本地服务器上似乎运行良好。问题是当我将其放在生产服务器或开发服务器上时,我无法对这两个服务器进行更改。

您是否在应用程序池中使用用于生产服务器上网站的Web Garden?如果是的话,这可能是问题所在。我是个新手对于任何类型的web开发。我不确定生产服务器是如何设置的。我必须询问我的IT部门他们是如何设置的。我希望这只是我的代码中的某个内容…或者可能是我需要应用的web.config文件中的某个内容。几乎不可能理解您的问题是什么,仅仅发布一堆不完整的代码使问题更加模糊,例如,您有两个不同的queryRequestExisting方法定义。请告诉我们您从何处获得空引用异常。这是一个相当常见的错误,通常表示代码中存在一些问题,如数据库更新失败,可能是由于缺少参数等。您应该指出断点并查看错误发生的确切位置是的,我意识到很难理解问题是什么…相信我,我已经阅读了许多不同的论坛问题和答案。如果你注意到两个不同的queryExistingData方法…一个是我的原始代码,另一个是显示我如何尝试使用会话存储对象。当我尝试调用savePgmData时,就会出现问题,因为我有代码,如果(newWaferRequest!=null)--有时为null,有时不为null。
[WebMethod(EnableSession=true)]
public static string queryRequestExisting(string request_pk)
{
    waferRequest newWaferRequest;
    waferRequestObject newWaferRequestObject;

    JavaScriptSerializer js = new JavaScriptSerializer();
    try
    {
        newWaferRequest = new waferRequest(request_pk, "EXISTINGREQUEST");
        newWaferRequestObject = newWaferRequest.CURRENTREQUEST;

        HttpContext.Current.Session["newWaferRequest"] = newWaferRequest;
        HttpContext.Current.Session["newWaferRequestObject"] = newWaferRequestObject;

        string json = js.Serialize(newWaferRequest);
        return json;
    }
    catch (Exception)
    {
        return null;
    } 
}


//snippet of savePgmData with session 
public static string savePgmData(Dictionary<string, string> pgm_requests)
{
    waferRequest newWaferRequest = HttpContext.Current.Session["newWaferRequest"];

    PgmRequestObject currentPgm;
    if (newWaferRequest != null)
    {
        try
        {
            //if (!Convert.ToBoolean(pgm_requests["pgmEdit"])) //not performed when request pgm being edited
             string rtnMessage;
            //create new pgm in waferRequest object
            if (pgm_requests["PGMRT_INDEX_PK"] == null)
            {
                int index = newWaferRequest.addNewPGMRequest() - 1;
                currentPgm = (PgmRequestObject)newWaferRequest.PGMREQUESTLIST[index];