0

我很难弄清楚这一点。我不能很好地解释它,所以这里首先是一些 html/asp:

<%for(int i=0; i<getCountRows(); i++)
    {
        setLabelsFestivals(i);
%>
    <form action="festival_details.aspx" method="post">
        <table id="table_600px_border">
            <tbody class="content_table_left" style='padding: 10px;'>
                <tr>
                    <td class="content_table_300px content_table_left_up">
                        <div class="text_bold">
                            <asp:Label ID="nameFestival" runat="server"></asp:Label>
                        </div>
                        <asp:HiddenField ID="fest_id" runat="server" />
                    </td>
                    <td class="content_table_300px content_table_left_up_bottom">
                        <asp:Label ID="startDateFestival" runat="server"></asp:Label>
                    </td>
                </tr>
                <tr>
                    <td class="content_table_left_up">
                        <asp:Label ID="locationFestival" runat="server"></asp:Label>
                    </td>
                    <td class="content_table_left_up">
                        <asp:Label ID="endDateFestival" runat="server"></asp:Label>
                    </td>
                </tr>
                <tr>
                    <td class="content_table_left_up_bottom">
                        <asp:HyperLink ID="urlFestival" runat="server">Site</asp:HyperLink>
                    </td>
                    <td class="content_table_right_bottom">
                    <input type="submit" name="btnDetails" value="Details" />
                    </td>
                </tr>
            </tbody>
        </table>
    </form>
<% }

对于数据集中的每一行,使用一个简单的提交按钮动态创建一个表单。这就是后面代码中发生的事情

//This method makes sure that the correct labels are shown on the screen
protected void setLabelsFestivals(int positionDataSet)
{
    //Checking if data is found for bands
    if (getCountRows() > 0)
    {
        DateTime dtStartDate = Convert.ToDateTime(dataSetFestivals.Tables[0].Rows[positionDataSet]["fest_datum"].ToString());
        DateTime dtEndDate = Convert.ToDateTime(dataSetFestivals.Tables[0].Rows[positionDataSet]["fest_einddatum"].ToString());

        //Showing all festivals and its data
        nameFestival.Text = dataSetFestivals.Tables[0].Rows[positionDataSet]["fest_naam"].ToString();
        fest_id.Value = dataSetFestivals.Tables[0].Rows[positionDataSet]["fest_id"].ToString();
        startDateFestival.Text = "Begindatum: " + dtStartDate.ToString("yyyy-MM-dd");
        locationFestival.Text = "Locatie: " + dataSetFestivals.Tables[0].Rows[positionDataSet]["fest_locatie"].ToString();
        endDateFestival.Text = "Einddatum: " + dtEndDate.ToString("yyyy-MM-dd");
        urlFestival.NavigateUrl = "http://" + dataSetFestivals.Tables[0].Rows[positionDataSet]["fest_url"].ToString();
        urlFestival.Target = "_blank";
    }
}

那么,例如,我怎样才能在festival_details.aspx 中获取隐藏字段宽度 id“fest_id”的值?这是我尝试过的:

HttpContext variables = HttpContext.Current;
strFormIdFest = variables.Request["fest_id"];

但是,字符串 strFormIdFest 始终为空。我想这与clientId有关?

4

1 回答 1

1

首先,asp.net 网络表单被设计为每页只使用一个表单。您应该考虑使用像转发器这样的控件来在同一个表单中呈现您的控件。

无论如何。如果您正在查看(使用断点和快速查看)您的请求变量,您应该能够找到隐藏字段。但它没有命名为“fest_id”,它有另一个名称,包含页面和控件名称以及一堆其他字符。这是所有 asp.net 控件(如 asp:HiddenField)的默认方式。

如果您使用的是 asp.net 4.0,则可以通过将 ClientIDMode 设置为 Static 来强制 asp.net 控制您的 id:

<asp:HiddenField ID="fest_id" runat="server" ClientIDMode="Static" />

或者您可以使用标准的 html 隐藏控件来获取正确的 id,但在这种情况下您不能使用后面的代码来设置值:

 <input type="hidden" name="fest_id" id="fest_id">

你应该考虑你的 aspx 中的 for 循环是否是要走的路。它不是进入网络表单的标准方式。查看转发器或其他控件以呈现复杂的标记。

于 2013-05-09T19:52:32.830 回答