使用C#中的查询字符串将具有特殊字符的字符串传递到另一个页面

时间:2015-03-23 03:20:12

标签: c# asp.net

我在asp页面上使用以下命令参数:

 <asp:TemplateField ItemStyle-HorizontalAlign="Right">
        <ItemTemplate>
            <asp:LinkButton ID="lnkView" runat="server" Text="View" OnClick="View" CommandArgument='<%# Eval("fldDispatchNo")+","+Eval("UniqueKey") %>'></asp:LinkButton>
        </ItemTemplate>

命令参数中的 uniquekey 是使用GUID生成的。 这是我在onclick事件中的代码:

protected void View(object sender, EventArgs e)
    {
        LinkButton b = (LinkButton)sender;
        string arguments = b.CommandArgument;
        string[] args = arguments.Split(',');

        string id = args[0].ToString();
        string code = args[1].ToString();


        //int ID = int.Parse((sender as LinkButton).CommandArgument[1].ToString());
        string embed = "<object data=\"{0}{1}\" type=\"application/pdf\" width=\"700px\" height=\"500px\">";
        embed += "If you are unable to view file, you can download from <a href = \"{0}{1}&download=1\">here</a>";
        embed += " or download <a target = \"_blank\" href = \"http://get.adobe.com/reader/\">Adobe PDF Reader</a> to view the file.";
        embed += "</object>";
        ltEmbed.Text = string.Format(embed, ResolveUrl("~/FileCS.ashx?Code="), code);

        ModalPopupExtender1.Show();


        string IDE = ID.ToString();
        showdetailsonpopup(IDE);


    }

现在我只想将代码(GUID生成的代码)传递给另一个页面。在FileCS.ashx页面中,我有以下代码:

public class FileCS : IHttpHandler
{

    public void ProcessRequest(HttpContext context)
    {
        string code = context.Request.QueryString["Code"];

        DataTable file = GetAFile(code);

我想使用数据库中的“代码”获取数据。但我在FileCS.ashx中得到错误

  

“对象引用未设置为对象的实例”。

我传递的示例GUID代码是“57536028-38d0-40aa-a035-b36d8e925e81”。

1 个答案:

答案 0 :(得分:0)

您需要URLEncode值:

ltEmbed.Text = string.Format(embed, ResolveUrl("~/FileCS.ashx?Code="), HTTPUtility.UrlEncode(code));

我还怀疑GetFile()方法中存在其他问题。