我不熟悉C#/ ASP / .NET(随时随地学习),所以除了我目前这样做的问题之外,我很可能会以较低的方式解决这个问题。我会尽量保持清晰(可能过于......)。
我有一个带有文本框的表单,用于列入服务器主机名,由换行符分隔。按下提交按钮后,它将使用PostBackUrl="~/btil_Info.aspx"
。在btil_info.aspx.cs代码隐藏中,我使用以下内容从Page_Load()
中的上一个表单获取所述文本框(hostnames_tb)中的信息:
string hostnames = ((TextBox)Page.PreviousPage.FindControl("hostnames_tb")).Text;
在Page_Load()中,我遍历这个主机名列表并构建一个包含每个主机的几个字段的表单(一些文本框和每个主机的下拉菜单)。填写完这些字段后,按下这里调用Submit_Click()的提交按钮,在同一代码隐藏中,页面似乎重新加载,因为在执行Submit_Click()之前再次调用Page_Load。这样做,填充的表单数据将丢失,主机名列表也将丢失。
在开发的早期阶段,我在第一个表单页面上都有这个,并且提交按钮没有调用PostBackURL
,它只是调用Submit_Click()
,它工作得很好。页面没有重新加载,表单保留在页面上,我没有丢失数据。但就像现在一样,按钮的工作方式相同。唯一的区别(我看到)是通过上一个调用PostBackURL
的表单来访问这个麻烦的页面。
我不相信任何事情应该要求页面刷新/重新加载。只要表单数据被发布,并且只要前一个表单中的主机名列表也可以检索,我实际上并不关心页面是否刷新/重新加载。我只需要能够访问表单数据和主机名列表,以便我可以将其传递给我将更新SharePoint列表的另一种方法(该部分的代码已经在工作)。我尝试在第二个代码隐藏(btil_Info.aspx.cs)中将hostnames
字符串作为类变量,并在页面加载时尽快设置它,如果它是空的,但显然它不会在页面重新加载时保持不变并被设置回null。
以下是一些代码片段,我希望能提供一些帮助:
第一页,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.....
}
非常感谢您的帮助!
答案 0 :(得分:0)
如果您从add_BTIL.aspx发布到btil_Info.aspx,那么将永远不会调用add_BTIL.aspx.cs文件中的Submit_Click函数。
根据您为btil_Info.aspx页面提供的有限标记... 如果您没有在表单id =“hosts_form”内的服务器控件内部呈现主机名列表,那么当您点击提交按钮时,将不会将任何内容发布到您的Submit_Click函数。
我个人不喜欢从一个页面发布到另一个页面,所以这里有一些建议。
如果您想要执行多页向导,那么您可以考虑使用asp.net wizard control。 或者如果你想保持简单,使用两个asp Panel controls并显示第一个,发布数据,然后隐藏第一个并显示第二个。