![](/img/trans.png)
[英]RadioButtonList won't change after doPostBack - ASP.NET JS C#
[英]My RadioButtonList won't append Query String or show selected value after Postback - C# & .Net
我有2个问题。 在aspx页面上,我有3个RadioButtonLists(又名RBL),它们从数据库表中获取每个数据。 在任何RBL上进行选择后,都会在同一页面上进行回发,并且该特定RBL的值将输入到ListView寻找的查询字符串中,以基于查询字符串过滤出产品。 当列表视图读取查询字符串并适当过滤列表时,它可以正常工作。
问题1-在回发时,从3个RBL中的任何一个选择的值在页面加载时都不会被选择。 因此,即使我在页面上设置了默认值,我所有的RBL都没有任何值。 如何使我的页面重新加载您在RBL中选择的值?
问题2-如果您在其他2个RBL的任何一个上进行选择,则不会更新查询字符串,而是会在再次发回时擦除第一个值。 因此,如果您在RBL-1中选择某些内容,它将使用查询字符串中更新的特定字段进行回发,但是,如果您在RBL-2中进行选择,它将仅回发RBL-2中的值,并清除该值您刚刚从RBL-1中挑选的。 我如何加载页面,同时在查询字符串中保留任何先前的选择?
ASPX code:
<p>Normally Open or Closed:<asp:RadioButtonList ID="RadioButtonList1" runat="server" EnableViewState="true"
AutoPostBack="true" DataSourceID="NormalitySDS" DataTextField="Op"
DataValueField="Op" onselectedindexchanged="RadioButtonAllLists_SelectedIndexChanged">
</asp:RadioButtonList>
<asp:SqlDataSource ID="NormalitySDS" runat="server"
ConnectionString="<%$ 005 %>"
SelectCommand="SELECT DISTINCT [Op] FROM [Matrix] ORDER BY [Op]">
</asp:SqlDataSource>
</p>
<p>Sizes:<asp:RadioButtonList ID="RadioButtonList2" runat="server" EnableViewState="true"
AutoPostBack="True" DataSourceID="SizesSDS" DataTextField="SIZE" RepeatColumns="2"
DataValueField="SIZE" onselectedindexchanged="RadioButtonAllLists_SelectedIndexChanged">
</asp:RadioButtonList>
<asp:SqlDataSource ID="SizesSDS" runat="server"
ConnectionString="<%$ 005 %>"
SelectCommand="SELECT DISTINCT [SIZE] FROM [Matrix] ORDER BY [SIZE]">
</asp:SqlDataSource>
</p>
<p>Body:<asp:RadioButtonList ID="RadioButtonList3" runat="server" EnableViewState="true"
AutoPostBack="True" DataSourceID="BodySDS" DataTextField="Body"
DataValueField="Body" OnSelectedIndexChanged="RadioButtonAllLists_SelectedIndexChanged">
</asp:RadioButtonList>
<asp:SqlDataSource ID="BodySDS" runat="server"
ConnectionString="<%$ 005 %>"
SelectCommand="SELECT DISTINCT [Body] FROM [Matrix] ORDER BY [Body]">
</asp:SqlDataSource>
<SelectParameters>
<asp:QueryStringParameter DefaultValue="NC" Name="Op" QueryStringField="Op" Type="String" />
<asp:QueryStringParameter DefaultValue="0.25" Name="Sz" QueryStringField="Sz" Type="String" />
<asp:QueryStringParameter DefaultValue="304" Name="Body" QueryStringField="Body" Type="String" />
</SelectParameters>
后台代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace Configurator
{
public partial class Product_Config_Full_wQuery : System.Web.UI.Page
{
string BaseUrl = "/Product_Config_Full_wQuery.aspx";
string op;
string op2;
string sz;
string body;
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
op = (Server.UrlDecode(Request.QueryString["op"] ));
RadioButtonList1.SelectedIndex = op2;
RadioButtonList1.DataBind();
sz = Server.UrlDecode(Request.QueryString["sz"]);
body = Server.UrlDecode(Request.QueryString["body"]);
}
}
// Combining all actions into a single protected-event
protected void RadioButtonAllLists_SelectedIndexChanged(object sender, EventArgs e)
{
op = RadioButtonList1.SelectedValue.ToString();
sz = RadioButtonList2.SelectedValue.ToString();
body = RadioButtonList3.SelectedValue.ToString();
if (op != null)
{
BaseUrl += "?Op=" + op + "&";
}
//else op = "NC";
if (sz != null)
{
BaseUrl += "Sz=" + sz + "&";
}
if (body != null)
{
BaseUrl += "Body=" + body + "&";
}
Response.Redirect(string.Format(BaseUrl, Server.UrlEncode(op), Server.UrlEncode(sz), Server.UrlEncode(body)));
}
由于您是在单选按钮列表中动态设置值,因此页面上设置这些控件的值实际上不会在回发时出现(页面生命周期将尝试在这些控件中设置值,然后才能实际检索数据源可能的值,并将这些项目添加到控件本身中)。
另外,请停止使用querystring来保存回发值-如果确实需要,请设置一些HiddenFields来保存信息,这些内容将通过回发保持不变,而您不必担心奇怪的querystring问题
我以为我会发布代码,我曾经解决过自己的问题。 基于大约10个不同的网站资源和一些试验/错误。
public partial class Bla zay blaz : System.Web.UI.Page
{
string BaseUrl = "/blahblah.aspx?";
string op;
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
op = Server.HtmlDecode(Request.QueryString["op"]);
if (op == null)
op = "A";
RadioButtonList1.SelectedValue = op;
}
protected void RadioButtonChanged(object sender, EventArgs e)
{
op = RadioButtonList1.SelectedValue;
if (op == null)
op = "NC";
if (op != "A")
BaseUrl += "Op=" + op + "&";
Response.Redirect(string.Format(BaseUrl, Server.HtmlEncode(op));
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.