0

我不熟悉 C#/ASP/.NET(边做边学),所以除了我目前的做法存在问题之外,我很可能会以一种劣等的方式来解决这个问题。我会尽量说清楚(也许过分了……)。

我有一个带有文本框的表单,用于接收服务器主机名列表,以换行符分隔。按下提交按钮后,它使用PostBackUrl="~/btil_Info.aspx". 在 btil_info.aspx.cs 代码隐藏中,我从前面的表单中的所述文本框 (hostnames_tb) 中获取信息Page_Load()

string hostnames = ((TextBox)Page.PreviousPage.FindControl("hostnames_tb")).Text;

在 Page_Load() 中,我遍历了这个主机名列表,并为每个主机构建了一个包含多个字段的表单(每个主机的几个文本框和一个下拉菜单)。填写完这些字段后,在此处按下在同一代码隐藏中调用 Submit_Click() 的提交按钮后,页面似乎重新加载,因为在执行 Submit_Click() 之前再次调用 Page_Load。这样做时,填写的表单数据会丢失,主机名列表也会丢失。

在开发的早期阶段,我在第一个表单页面上就有了这一切,提交按钮没有调用PostBackURL,它只是调用了Submit_Click(),它工作得非常好。页面没有重新加载,表单停留在页面上,我没有丢失数据。但就像现在一样,按钮的工作方式相同。唯一的区别(我看到的)是这个麻烦的页面是通过以前的表单调用到达的PostBackURL

我不相信任何事情都应该请求页面刷新/重新加载。我实际上并不关心页面是否刷新/重新加载,只要表单数据已发布并且只要前一个表单中的主机名列表也是可检索的。我只需要能够访问表单数据和主机名列表,以便我可以将其传递给我的另一个方法,该方法将更新 SharePoint 列表(不过,该部分的代码已经在工作)。我尝试hostnames在第二个代码隐藏(btil_Info.aspx.cs)中将字符串设置为类变量,并在页面为空时立即设置它,但显然它不会在页面重新加载时持续存在并设置回无效的。

以下是一些代码片段,希望对您有所帮助:

第一页,add_BTIL.aspx:

<form id="form1" runat="server">
<div>
    <asp:TextBox ID="hostnames_tb" runat="server" Rows="20" TextMode="MultiLine" Width="225px"></asp:TextBox>
    <br />
    <asp:Button ID="Submit" runat="server" PostBackUrl="~/btil_Info.aspx" Text="Submit" />
    <br />
    <asp:Literal ID="result" runat="server"></asp:Literal>
    <br /><br />
    <textarea id="hostnames_textarea" cols="25" rows="20" name="hostnames" title="Hostnames"></textarea></div>
</form>

第一页代码隐藏,add_BTIL.aspx.cs:

protected void Page_Load(object sender, EventArgs e)
{

}

protected void Submit_Click(object sender, EventArgs e)
{
    string hostnames = hostnames_tb.Text;
    /*
     * Etc.
     */
}

第二页,btil_Info.aspx:

<form id="hosts_form" runat="server">
    <p>
        <asp:Button ID="Submit" runat="server" Text="Submit" OnClick="Submit_Click" Height="26px" UseSubmitBehavior="False" /><br />
        <asp:Literal ID="result" runat="server"></asp:Literal><br />
    </p>
    <br />
</form>

^ 在这种形式中,我在搜索中的某处读到了UseSubmitBehavior="False"会阻止页面重新加载的内容,但它没有帮助。反正我在早期版本中没有使用它,也没有这个问题。

第二页代码隐藏,btil_Info.aspx.cs:

protected void Page_Load(object sender, EventArgs e)
{
    string hostnames = ((TextBox)Page.PreviousPage.FindControl("hostnames_tb")).Text;
    // etc.....
}

protected void Submit_Click(object sender, EventArgs e)
{
    // etc.....
}

非常感谢您的帮助!

4

1 回答 1

0

如果您从 add_BTIL.aspx 发布到 btil_Info.aspx,则永远不会调用文件 add_BTIL.aspx.cs 中的 Submit_Click 函数。

根据您为 btil_Info.aspx 页面提供的有限标记......将发布到您的 Submit_Click 函数。

就个人而言,我不喜欢从一页到另一页的帖子,所以下面有一些建议。

如果你想做一个多页向导,那么你可以考虑使用 asp.net向导控件。或者,如果您想保持简单,请使用两个 asp面板控件并显示第一个,发布数据,然后隐藏第一个并显示第二个。

于 2013-10-30T19:05:51.353 回答