【问题标题】:Pass parameter id to sql query using url routing使用url路由将参数id传递给sql查询
【发布时间】:2012-07-08 12:41:09
【问题描述】:

我是初学者 asp.net 开发人员

尝试创建我的第一个简单的新闻门户页面。

这是我所拥有的:

  • 数据库
  • Admin_News.aspx 将新闻添加到数据库中
  • Default.aspx 显示所有标题为可链接的新闻
  • NewsDetails.aspx 在点击 Default.aspx 中的标题时按 ID 显示详细信息

我是怎么做到的:

在 Default.aspx 中我使用了这段代码:

<div>
    <asp:Repeater ID="Repeater1" runat="server" DataSourceID="SqlDataSource1">
        <HeaderTemplate>
            <table border="1">
                <tr>
                    <td>
                        <b>title</b>
                    </td>
                    <td>
                        <b>news</b>
                    </td>
                    <td>
                        <b>imges</b>
                    </td>

                </tr>
        </HeaderTemplate>
        <ItemTemplate>
            <tr>
                <td>
                    <asp:HyperLink runat="server" ID="hl" NavigateUrl='<%#"~/NewsDetails.aspx?id=" + Eval("id")%>' Text='<%# Eval("title") %>'></asp:HyperLink>
                </td>
                <td>
                    <%# DataBinder.Eval(Container.DataItem, "news")%>
                </td>
                <td>
                    <img alt="" src='<%# DataBinder.Eval(Container.DataItem, "imageurl")%>' />
                </td>

            </tr>

        </ItemTemplate>
        <FooterTemplate>
            </table>
        </FooterTemplate>
    </asp:Repeater>
    <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:MoneyHolderConnectionString %>"
        SelectCommand="SELECT [id], [title], [news], [imageurl], [detail] FROM [News]"></asp:SqlDataSource>
</div>

NewsDetails.aspx 代码:

<asp:SqlDataSource ID="SqlDataSource2" runat="server" 
        ConnectionString="<%$ ConnectionStrings:MoneyHolderConnectionString %>" 
        SelectCommand="SELECT [title], [news], [imageurl], [detail] FROM [News] WHERE ([id] = @id)">
        <SelectParameters>
            <asp:QueryStringParameter Name="id" QueryStringField="id" Type="Int64" />
        </SelectParameters>
    </asp:SqlDataSource>


    <asp:Repeater ID="Repeater1" runat="server" DataSourceID="SqlDataSource2">
            <HeaderTemplate>

            </HeaderTemplate>
            <ItemTemplate>
               <h1 align="right"><br />
                 <strong><p style="color:#000">
                     <%# DataBinder.Eval(Container.DataItem, "title")%>
                 </strong></h1><p/><br />
                 <br />

                 <p align="center"><img src='<%# DataBinder.Eval(Container.DataItem, "imageurl")%>'/>
                 <p/>
                 <br />
                 <br />

                 <p id="detail" align="right" style="font-size:25px"><%# DataBinder.Eval(Container.DataItem, "detail")%><p/>
                 <br />

            </ItemTemplate>
            <FooterTemplate>

            </FooterTemplate>
  </asp:Repeater>

所以我正在做的是根据 .aspx?id= 中的 ID 在 url 中显示文章。 一切正常.. 直到我使用了 url 路由。

我更改/添加了一些代码来更改 url 的结构我不希望它看起来像 ~/NewsDetails.aspx?id=1 我想变成 ~/News/1 一样的结果。

所以我已将此代码添加到 Global.asax:

void Application_Start(object sender, EventArgs e) 
{
    // Code that runs on application startup
    RegisterRoutes(RouteTable.Routes);
}
public static void RegisterRoutes(RouteCollection routeCollection)
{
    routeCollection.MapPageRoute("RouteForNews", "News/{id}", "~/NewsDetails.aspx");
}

我将这段代码添加到后面的 NewsDetails.aspx.cs 代码中:

string id = Page.RouteData.Values["id"].ToString();

我将 NewsDetails.aspx 中的 NavigateUrl 更改为:

NavigateUrl='<%#"~/News/" + Eval("id")%>'

现在,当我打开 Default.aspx 时,新闻出现的标题可链接到 ~/News/“id number”,当我单击标题时,NewsDetails.aspx 打开时带有 /News/idnumber 的链接,但里面没有数据..它是空的,我只能看到母版页的设计。

我会很感激你的帮助我应该怎么做才能显示新闻,url中的 id 值它转到字符串 id 变量但我不知道如何将它传递给 sql 查询(我不是确定这是不是问题)

【问题讨论】:

    标签: asp.net sql c#-4.0


    【解决方案1】:

    您不应在 NewsDetails 页面的 asp:SqlDataSource 中使用 asp:QueryStringParameter,因为您的参数不再位于 QueryString 中。 QueryString 是 URL 中问号之后的部分。

    使用此链接了解如何将参数传递给 select 语句:

    How to pass variable to SelectCommand of SqlDataSource?

    【讨论】:

    • 我在 NewsDetails.aspx.cs 后面的代码中添加了这段代码:SqlDataSource1.SelectParameters.Add("@id", id); 并将选择参数更改为:&lt;SelectParameters&gt; &lt;asp:Parameter DefaultValue="&lt;%= id %&gt;" Name="id" /&gt; &lt;/SelectParameters&gt; 当我运行页面时出现此错误:Server Error in '/ ' 应用。将数据类型 nvarchar 转换为 bigint 时出错。说明:执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。
    • 我删除了选择参数代码并在 .cs 中添加了此代码:SqlDataSource2.SelectParameters.Add("id", DbType.Int32, id); 它有效!非常感谢
    【解决方案2】:

    connectionstring=""
    selectcommand="从联系人信息中选择姓名、年龄 状态=@StateCode">

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-02
      • 2015-04-25
      • 1970-01-01
      • 1970-01-01
      • 2013-10-22
      • 2019-07-21
      • 1970-01-01
      相关资源
      最近更新 更多