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

时间:2014-02-07 15:25:19

标签: asp.net vb.net

到目前为止,我们可以通过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>

服务器代码:

Sub Run_Report(ByVal sel As String)
    ReportViewer1.Reset()
    ReportViewer1.LocalReport.DataSources.Clear()
    Dim params_user(0) As ReportParameter


    Select Case which.Value

        Case "R"
            ReportViewer1.LocalReport.DataSources.Add(New ReportDataSource("DataSet1", ObjectDataSource1.ID))
            ReportViewer1.LocalReport.ReportPath = "GetReceits.rdlc"
            ReportViewer1.LocalReport.Refresh()
            ReportViewer1.LocalReport.EnableExternalImages = True
            params_user(0) = New ReportParameter("UserName", UserName.Text, False)
            ReportViewer1.LocalReport.SetParameters(params_user)

    End Select
End Sub

但是,出于安全原因,我们已要求将会话变量传递给报告。

这样,用户无需输入用户名即可打印报告。

我尝试更改此行:

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

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

但是当我试图运行它时,我得到了:

Object reference not set to an instance of an object.

如何解决此问题?

1 个答案:

答案 0 :(得分:0)

如果有效:

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

这会抛出NullReferenceException:

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

然后似乎Session("UserName")为空。

该问题的两个解决方案是

  1. 在页面加载时填充Session("UserName")(如果它为空)或
  2. 在该通话中使用User.Identity.Name(如果您的用户已经通过某种方式进行了身份验证)。
  3. 选项1
    在Page_Load代码中,您可以这样做:

    If (Session("UserName") Is Nothing) Then
        Session("UserName") = "the user name"
    End If
    

    选项2
    如果您已经对用户进行身份验证,则应该可以传递Page.User.Identity.Name value

    params_user(0) = New ReportParameter("UserName", User.Identity.Name, False)