Asp.net 如何将值作为会话变量传递给参数?

Asp.net 如何将值作为会话变量传递给参数?,asp.net,vb.net,Asp.net,Vb.net,到目前为止,我们能够通过reportviewer将表单varialbe传递给我们的报表 下面是我们当前的代码,非常有用 加价 <table> <tr> <td align="center" colspan="2"> <asp:Label runat="server" ID="lblUser" Text="Enter UserName" /> &l

到目前为止,我们能够通过reportviewer将表单varialbe传递给我们的报表

下面是我们当前的代码,非常有用

加价

    <table>
        <tr>
            <td align="center" colspan="2">
                <asp:Label runat="server" ID="lblUser" Text="Enter UserName" />
            </td>
       </tr>
       <tr>
            <td align="center">
                UserName:&nbsp;<asp:TextBox runat="server" ID="UserName" Width="75px" />
            </td>
            <td>
                <asp:Button runat="server" ID="btnGetUser" Text="Print" />
            </td>
        </tr>
    </table>
然而,由于安全原因,我们被要求传递会话变量以进行报告

这样,用户就不必输入用户名来打印报告

我尝试过改变这一行:

    params_user(0) = New ReportParameter("UserName", UserName.Text, False)

但当我尝试运行它时,我得到:

Object reference not set to an instance of an object.
如何解决此问题?

如果有效:

params_user(0) = New ReportParameter("UserName", UserName.Text, False)
这会抛出一个NullReferenceException:

params_user(0) = New ReportParameter("UserName", Session("UserName").ToString, False)
那么SessionUserName似乎是空的

这一问题的两个解决方案是

在页面加载时填充SessionUserName(如果为空),或者 如果您的用户已经以某种方式进行了身份验证,请在该调用中使用User.Identity.Name。 选择1 在页面加载代码中,可以执行以下操作:

If (Session("UserName") Is Nothing) Then
    Session("UserName") = "the user name"
End If
选择2 如果您已经在验证您的用户,您应该能够通过:


SessionUserName为空surely@jadarney127,大家好,谢谢大家的回复。User.Identity.Name假定您正在通过Active Directory进行身份验证,是否?我们没有使用Active Directory。选项1是一个可行的选项,但由于某些原因,我仍然得到未设置为对象实例的对象引用。我创建了一个hiddenField标记并将其命名为UserHide。然后我将该Uhide作为控件ID传递给SelectParameters如何将其与YOUR选项1解决方案一起使用?@ChidiOkeh我认为User.Identity.Name会被填充,即使您使用的是表单身份验证,我以前也用过这种方式。我将根据您刚才提供的其他信息更新选项1的答案。顺便说一句,@ChidiOkeh,您需要将ControlParameter标记更改为PropertyName=Value asp:HiddenField使用Value属性存储信息,而不是文本属性。当你的页面加载时,UserHide中有用户名吗?@ChidiOkeh我实际上不知道用什么更新答案,因为我对UserHide了解不够。您是说要使用UserHide来填充会话变量吗?如果您将ControlParameters与HiddenField一起使用,为什么需要Sesion变量?我首选的方法是使用session变量。这样,一旦用户登录,他/她的id就会被识别并传递给报表的@UserName参数。但我不能让它工作。如上所述,当我这样做时:params_user0=New ReportParameterUserName,SessionUserName.ToString,False,我希望会话变量的值传递给param,但我一直得到对象引用错误。这就是为什么我认为我可以将其传递给隐藏字段,然后引用隐藏字段。然而
params_user(0) = New ReportParameter("UserName", Session("UserName").ToString, False)
If (Session("UserName") Is Nothing) Then
    Session("UserName") = "the user name"
End If
params_user(0) = New ReportParameter("UserName", User.Identity.Name, False)