如何使用linq将viewstate值传递给asp.net中的storedprocedure?

时间:2014-12-22 15:20:28

标签: c# asp.net linq

我在单个表上应用多重搜索选项.. 因为我已经做了一个接受3值的sp 。 我的问题是,如果我在表格上应用多重搜索,它一次只能获取一个搜索值 所以我使用了视图状态

  if (ViewState["gen"] != null || ViewState["cen"]!=null)
    {
        var a = db.sp_StudentSelect1(ViewState["gen"].ToString(), ViewState["cen"].ToString());

        GridView1.DataSource = a;
        DataBind();
    }

但它给了我一个错误

Object reference not set to an instance of an object.

描述:执行当前Web请求期间发生了未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

异常详细信息:System.NullReferenceException:未将对象引用设置为对象的实例。

请帮忙......

2 个答案:

答案 0 :(得分:2)

您希望if语句中的不是

 if (ViewState["gen"] != null && ViewState["cen"]!=null)

现在只有其中一个可以是非null并且if语句将通过,但是如果其中一个为null,那么if won中的语句会起作用,因为你不能调用{{ 1}}在空值上。使用&&如上。或者,如果其中一个值为null(通过传递空字符串或其他一些默认值),您可以编辑代码以使其失败。


以下是如何修复"修复"代码:

ToString()

答案 1 :(得分:0)

根据Hogan的回答,如果所有参数都是强制性的,那么请使用&&如果您的存储过程没有返回任何行或null

,请在绑定之前使用此检查

这表示var a具有空值。 在分配数据源之前,请执行此检查

if(a!=DBNull.Value)
{

GridView1.DataSource = a;
DataBind();
}

从ViewState传递一个参数时它是否有效?

您还可以在ViewState中存储值吗? (即什么方法page_load?)