我在两个页面之间传递url的查询字符串时收到错误

时间:2017-03-23 13:42:38

标签: c# asp.net sql-server

我正在开发一个项目,在第一页上是default.aspx页面我有一个网格视图,它与表 category 的列 categoryname 绑定。这是代码default.aspx:

 <form id="form1" runat="server">
<div>
    <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="catid"
        DataSourceID="SqlDataSource1">
        <Columns>
            <asp:HyperLinkField DataNavigateUrlFields="catid" DataNavigateUrlFormatString="~/subcategory.aspx?catid={0}"
                DataTextField="categoryname" />
        </Columns>
    </asp:GridView>
</div>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:ToursandTravelsConnectionString %>"
    SelectCommand="SELECT [catid], [categoryname] FROM [category]"></asp:SqlDataSource>
</form>

现在我有一个名为subcategory.aspx的页面,它有一个子类别名称的标签,然后是相应的图像,反之亦然,从表子类别检索。这是我的子类别代码.aspx

protected void Page_Load(object sender, EventArgs e)
{

    labelsubcatname.Text = HttpUtility.UrlDecode(Request.QueryString["catid"]);      
}

问题是,当我有catid时,我得到的值为1,2,依此类推,但是当我从表子类别中检索到 subcatname 时如下:

Image of table subcategory

它不显示来自子类别表的 subcatname 。如何获取子类别的值而不是catid?

我还希望根据我在网格视图中显示的子类别名称显示图像。我现在正在获取所有图像这是我的网格视图代码

<form id="form1" runat="server">
<div>
<table>
<tr>
<td>
    <asp:Label ID="labelsubcatname" runat="server"></asp:Label>
    <br />
    <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
        DataSourceID="SqlDataSource1">
        <Columns>
            <asp:TemplateField HeaderText="pic" SortExpression="pic">
                <EditItemTemplate>
                    <asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("pic") %>'></asp:TextBox>
                </EditItemTemplate>
                <ItemTemplate>
                    <asp:Image ID="Image1" runat="server" Height="200px" 
                        ImageUrl='<%# Eval("pic") %>' Width="250px" />
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>
    </asp:GridView>
    <asp:Label ID="labelviewdetail" runat="server" Text="View Detail"></asp:Label>
    <br />
</td>

</table>
</div>
</form>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
    ConnectionString="<%$ ConnectionStrings:ToursandTravelsConnectionString %>" 
    SelectCommand="SELECT [pic] FROM [subcategory]"></asp:SqlDataSource>

3 个答案:

答案 0 :(得分:0)

您在subategory.aspx的页面加载中有Subcatid。然后使用Subcatid从数据库中检索行值。

答案 1 :(得分:0)

您可以在DataSource中使用内部联接查询,以便从子类别表中获取子名称,如下所示:

<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:ToursandTravelsConnectionString %>"
SelectCommand="SELECT C.[catid], C.[categoryname], S.[subcatname] FROM [category] C INNER JOIN subcategory S ON C.[catid] = S.[catid]"></asp:SqlDataSource>

然后在您的超链接字段中使用subcatname:

<Columns>
    <asp:HyperLinkField DataNavigateUrlFields="subcatname" DataNavigateUrlFormatString="~/subcategory.aspx?subcatname={0}"
        DataTextField="categoryname" />
</Columns>

然后你可以从查询字符串中获取它:

labelsubcatname.Text = Request.QueryString["subcatname"] != null
                        ? Request.QueryString["subcatname"].ToString()
                        : "N/A";

答案 2 :(得分:0)

好的,听着

DataNavigateUrlFormatString="~/subcategory.aspx?catid={0}"

表示您从数据库传递元素0,即

将其更改为1,即

DataNavigateUrlFormatString="~/subcategory.aspx?catid={1}"    

你不需要

HttpUtility.UrlDecode(Request.QueryString["subcatname"]);'

只需用

替换它

的Request.QueryString [&#34; subcatname&#34]。的ToString();