我不熟悉 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.....
}
非常感谢您的帮助!