单击按钮的回发问题
Postback issue with button click
我正在使用 Visual Studio 网络表单与 asp.net 和 C#。我需要让我的单选按钮在页面上动态更改,而不是 运行 单击按钮时的功能。我该如何解决这个回发问题?
在我的页面上,我有一个单选按钮可以动态地从英语或法语更改页面
<asp:RadioButtonList ID="RadioBtnLanguage" runat="server" AutoPostBack="True" ViewStateMode="Enabled" Width="227px" RepeatDirection="Horizontal">
<asp:ListItem value="English" Selected="True"> English</asp:ListItem>
<asp:ListItem Value="French"> Français</asp:ListItem>
</asp:RadioButtonList>
我这样更改语言:
protected void Page_Load(object sender, EventArgs e)
{
switch (RadioBtnLanguage.SelectedValue.ToString())
{
case "English":
LblTitle.Text = "InfoHere"
changeAttendType();
break;
case "French":
LblTitle.Text = "InfoHere";
changeAttendType();
break;
}
}
效果很好。但是我有一个函数 changeAttendType();
我不想 运行 当我的提交按钮被点击时
<asp:Button ID="ButtonEditEvent" runat="server" Text="Submit"
onclick="ButtonEditEvent_Click" CssClass="formbutton"/>
当有人将语言单选按钮从英语更改为法语或法语或英语时,我怎么能不 运行 changeAttendType();
单击按钮而是让它 运行 ?
好的,在我 99% 的页面加载中 - “很多”年的每个页面?
如果您要放入会导致 post-back 和事件触发器的按钮、组合框,甚至文本框?那么,那你就得做出一个“设计”的选择了。
“选择”意味着设置代码,或者任何您在第一页加载时 运行 必须进入 if (!IsPostBack) 代码块的内容。事实上,如果你不考虑这个?
然后各种问题接踵而至。您可能会说在页面加载时加载一些组合框。然后用户选择一个组合值,但在 page-load 上您再次触发该加载。 GridView 和其他所有内容也是如此。
如果您 re-load 网格,或 re-load 组合框?然后你就崩溃了,失去了他们刚刚做出的用户选择!!!
所以,作为首要规则?要控制这个,不要有“讨厌”的惊喜?
然后使用 !IsPostback 进行真正的第一页加载。
因此,对于单选按钮,您可以这样做:
protected void Page_Load(object sender, EventArgs e)
{
{
if (!IsPostBack)
LoadLang();
}
}
void LoadLang()
{
switch (RadioBtnLanguage.SelectedValue.ToString())
{
case "English":
LblTitle.Text = "InfoHere";
changeAttendType();
break;
case "French":
LblTitle.Text = "InfoHere";
changeAttendType();
break;
}
}
如果您真的需要单选按钮起作用,并允许用户更改值?然后你的单选按钮可以有一个 auto-post back = true,你简单地连接 RB
的事件
这样说:
<asp:RadioButtonList ID="RadioBtnLanguage" runat="server"
AutoPostBack="True" OnSelectedIndexChanged="RadioBtnLanguage_SelectedIndexChanged">
<asp:ListItem>English</asp:ListItem>
<asp:ListItem>French</asp:ListItem>
</asp:RadioButtonList>
因此,我们 auto-post 返回 - true,并且即使用户更改了该 RB。
偶数存根然后变成这样:
protected void RadioBtnLanguage_SelectedIndexChanged(object sender, EventArgs e)
{
LoadLang();
}
如你所见?永远不要每次都使用 page.load 事件来 re-run 代码,或者一直使用 运行 代码,因为页面加载总是 运行s 对于任何按钮点击,任何 post-back ,任何下拉列表,甚至在上面 - 自动 post-back 和 RB“更改”事件。
实际上,通过“引入”上述设计模式?您可以自由添加控件、按钮、事件等。
因此,没有代码 运行s un-expected。因此,随着时间的推移,当您添加更多按钮、更多事件或其他内容时?您一点都不在乎,并且每次在页面加载时都没有一些杂散代码 运行ning(例如您的 RB 按钮代码)。
RB 按钮代码没有,也不应该在每个 post-back 上 运行。但正如我们所知,page.load 每次都会触发,并且一直触发,每次 post-back 都会触发。因此,将您的设置或代码放在 运行 一次页面加载中,但也放在那个 !IsPostBack 存根中。
99% 或更多,事实上,我创建的每个网络表单页面中都有 !IsPostBack 存根。
如果你违反了以上规则呢?那么开发人员对什么代码 运行 或任何触发 post-back 的简单按钮的控制相当松散 - 这就是此类页面上将发生的所有事情。
因此,只需在所有网页中采用 if (!IsPostBack) 代码存根,然后您就可以编写代码而无需考虑(或担心)代码每次都会 运行 而不是您想要的或经常这样的代码 运行s 每次,这不仅是资源的浪费,而且通常意味着你在不需要的时候一遍又一遍地 运行ning 代码。
我正在使用 Visual Studio 网络表单与 asp.net 和 C#。我需要让我的单选按钮在页面上动态更改,而不是 运行 单击按钮时的功能。我该如何解决这个回发问题?
在我的页面上,我有一个单选按钮可以动态地从英语或法语更改页面
<asp:RadioButtonList ID="RadioBtnLanguage" runat="server" AutoPostBack="True" ViewStateMode="Enabled" Width="227px" RepeatDirection="Horizontal">
<asp:ListItem value="English" Selected="True"> English</asp:ListItem>
<asp:ListItem Value="French"> Français</asp:ListItem>
</asp:RadioButtonList>
我这样更改语言:
protected void Page_Load(object sender, EventArgs e)
{
switch (RadioBtnLanguage.SelectedValue.ToString())
{
case "English":
LblTitle.Text = "InfoHere"
changeAttendType();
break;
case "French":
LblTitle.Text = "InfoHere";
changeAttendType();
break;
}
}
效果很好。但是我有一个函数 changeAttendType();
我不想 运行 当我的提交按钮被点击时
<asp:Button ID="ButtonEditEvent" runat="server" Text="Submit"
onclick="ButtonEditEvent_Click" CssClass="formbutton"/>
当有人将语言单选按钮从英语更改为法语或法语或英语时,我怎么能不 运行 changeAttendType();
单击按钮而是让它 运行 ?
好的,在我 99% 的页面加载中 - “很多”年的每个页面?
如果您要放入会导致 post-back 和事件触发器的按钮、组合框,甚至文本框?那么,那你就得做出一个“设计”的选择了。
“选择”意味着设置代码,或者任何您在第一页加载时 运行 必须进入 if (!IsPostBack) 代码块的内容。事实上,如果你不考虑这个?
然后各种问题接踵而至。您可能会说在页面加载时加载一些组合框。然后用户选择一个组合值,但在 page-load 上您再次触发该加载。 GridView 和其他所有内容也是如此。 如果您 re-load 网格,或 re-load 组合框?然后你就崩溃了,失去了他们刚刚做出的用户选择!!!
所以,作为首要规则?要控制这个,不要有“讨厌”的惊喜?
然后使用 !IsPostback 进行真正的第一页加载。
因此,对于单选按钮,您可以这样做:
protected void Page_Load(object sender, EventArgs e)
{
{
if (!IsPostBack)
LoadLang();
}
}
void LoadLang()
{
switch (RadioBtnLanguage.SelectedValue.ToString())
{
case "English":
LblTitle.Text = "InfoHere";
changeAttendType();
break;
case "French":
LblTitle.Text = "InfoHere";
changeAttendType();
break;
}
}
如果您真的需要单选按钮起作用,并允许用户更改值?然后你的单选按钮可以有一个 auto-post back = true,你简单地连接 RB
的事件这样说:
<asp:RadioButtonList ID="RadioBtnLanguage" runat="server"
AutoPostBack="True" OnSelectedIndexChanged="RadioBtnLanguage_SelectedIndexChanged">
<asp:ListItem>English</asp:ListItem>
<asp:ListItem>French</asp:ListItem>
</asp:RadioButtonList>
因此,我们 auto-post 返回 - true,并且即使用户更改了该 RB。
偶数存根然后变成这样:
protected void RadioBtnLanguage_SelectedIndexChanged(object sender, EventArgs e)
{
LoadLang();
}
如你所见?永远不要每次都使用 page.load 事件来 re-run 代码,或者一直使用 运行 代码,因为页面加载总是 运行s 对于任何按钮点击,任何 post-back ,任何下拉列表,甚至在上面 - 自动 post-back 和 RB“更改”事件。
实际上,通过“引入”上述设计模式?您可以自由添加控件、按钮、事件等。
因此,没有代码 运行s un-expected。因此,随着时间的推移,当您添加更多按钮、更多事件或其他内容时?您一点都不在乎,并且每次在页面加载时都没有一些杂散代码 运行ning(例如您的 RB 按钮代码)。
RB 按钮代码没有,也不应该在每个 post-back 上 运行。但正如我们所知,page.load 每次都会触发,并且一直触发,每次 post-back 都会触发。因此,将您的设置或代码放在 运行 一次页面加载中,但也放在那个 !IsPostBack 存根中。
99% 或更多,事实上,我创建的每个网络表单页面中都有 !IsPostBack 存根。
如果你违反了以上规则呢?那么开发人员对什么代码 运行 或任何触发 post-back 的简单按钮的控制相当松散 - 这就是此类页面上将发生的所有事情。
因此,只需在所有网页中采用 if (!IsPostBack) 代码存根,然后您就可以编写代码而无需考虑(或担心)代码每次都会 运行 而不是您想要的或经常这样的代码 运行s 每次,这不仅是资源的浪费,而且通常意味着你在不需要的时候一遍又一遍地 运行ning 代码。