2013-05-02 3 views
0

У меня есть 2 проблемы. На странице aspx у меня есть 3 RadioButtonLists (aka RBL), которые получают каждую из своих данных из таблицы базы данных. После выбора на любом RBL обратная передача происходит на той же странице, и значение этого конкретного RBL вводится в очередь запросов, которую ищет ListView, для фильтрации продуктов на основе запроса. Просмотр списка прекрасно работает, когда он считывает строку запроса, чтобы правильно фильтровать список вниз.My RadioButtonList не будет добавлять строку запроса или показывать выбранное значение после Postback - C# и .Net

выпуск 1 - при обратной передаче значение, выбранное вами из любого из 3 RBL, не выбирается при загрузке страницы. Таким образом, все мои RBL не имеют никакого значения, даже если у меня есть значение по умолчанию, установленное на странице. Как я могу загрузить свою страницу со значениями, выбранными в выбранных вами RBL?

Выпуск 2 - Если вы сделаете выбор на любом из 2-х других RBL, вместо того, чтобы обновлять запрос, он вытирает первое значение при повторном возврате. Поэтому, если вы выберете что-то в RBL-1, он отправится обратно с этим конкретным полем, обновленным в querystring, но затем, если вы выберете что-то в 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> 

Code-за:

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))); 
     } 

ответ

0

Я решил, что отправлю код, я использовал, чтобы исправить свою проблему. Основано на около 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)); 
} 

} 
0

Поскольку вы динамически устанавливая значения в списке кнопки радио, значения страница будет установка этих элементов управления, на самом деле не существует на постбэка (жизненный цикл страницы будет пытаться установить значения в эти элементы управления, прежде чем ваши источники данных действительно извлекут возможные значения и добавят эти элементы в сам элемент управления).

Кроме того, прекратить использование строки запроса для хранения значений обратной передачи - если вам действительно нужно, настроить некоторые HiddenFields для хранения информации, те будут сохраняться через постбэк и вам не придется беспокоиться о нечетной строке запроса выдает

+0

Hi @freduardo Есть ли способ играть с хронометром на жизненном цикле страницы, чтобы сначала установить значения управления, а затем установить значения?
Кроме того, можете ли вы показать мне код того, как вы бы реализовали HiddenFields, основываясь на том, как моя страница в настоящее время кодируется? –

+0

Я понял часть его. Во-первых, я изменил все кодировки/декодирования сервера на HTMLEncode вместо UrlEncode. –

+0

Затем на лицевой стороне я изменил каждый из своих RBL, чтобы иметь значение по умолчанию, которое включало ВСЕ варианты. ** **