我这里有个页面中的两个listbox之间相互移动选项,
可是这种移动会回发到服务器,虽然实现移动的两个按钮已经设定causesvalidation=false,但是
还是会出现以下问题
1)虽然其他requiredfiledvalidator不会被触发,但是requiredfiledvalidator的错误信息会显示出来。
2)如果本页面的javascript做的无刷新连动菜单已选择,导致其选项丢失请问,两个listbox之间移动选项有没有办法不回发到服务器,而直接在客户端执行?如何解决?

解决方案 »

  1.   

    你是不是应该把 AutoPostBack=false了?;
    或者 用客户端的控件不就可以了吗?
      

  2.   

    Use HtmlControl instead of WebControls...
      

  3.   

    用Javascript 可以实现,但服务器端不知道你在客户端做的变动,你需要写其他的编码把你所做的操作传回服务器端(譬如使用<input type=hidden>),否则,下次POSTBACK后,你的ListBox就会有问题了
    >>>1)虽然其他requiredfiledvalidator不会被触发,但是requiredfiledvalidator的错误信息会显示出来估计你在什么地方调用了Page.Validate(),把它去掉,在你的按钮或其他需要验证的地方调用它,然后检查Page.InValid
    <form runat="server">
    <asp:TextBox id="txt" runat="server" /><asp:RequiredFieldValidator id="rfv" runat="server" ControlToValidate="txt" ErrorMessage="***Required***" /><table>
    <tr>
    <td>
    <asp:ListBox id="lb1" runat="server" Rows="4" SelectionMode="Multiple">
     <asp:ListItem Value="1">1</asp:ListItem>
     <asp:ListItem Value="2">2</asp:ListItem>
     <asp:ListItem Value="3">3</asp:ListItem>
     <asp:ListItem Value="4">4</asp:ListItem>
    </asp:ListBox>
    </td>
    <td>
     <asp:Button id="btn1" runat="server" Text="<<" OnClick="Button_Click" CausesValidation="false"/>
     <asp:Button id="btn2" runat="server" Text="<" OnClick="Button_Click" CausesValidation="false"/>
     <asp:Button id="btn3" runat="server" Text=">" OnClick="Button_Click" CausesValidation="false"/>
     <asp:Button id="btn4" runat="server" Text=">>" OnClick="Button_Click" CausesValidation="false"/>
     <asp:Button id="btn5" runat="server" Text="Submit" OnClick="ValidateData" />
    </td>
    <td>
    <asp:ListBox id="lb2" runat="server" Rows="4" SelectionMode="Multiple">
    </asp:ListBox>
    </td>
    </tr>
    </table>
    </form>
    <script language="C#" runat="server">
    void Page_Load(Object sender, EventArgs e)
    {
    // if (IsPostBack)
     // Page.Validate();
    }
    void ValidateData(Object sender, EventArgs e)
    {
      Page.Validate();
      if (!Page.IsValid)
       return;  Response.Write("Data is good");
    }
    void Button_Click(Object sender, EventArgs e)
    {
      Button btn = (Button)sender;
      if (btn == btn1)
    MoveItems(lb2, lb1,true);
      else if (btn == btn2)
    MoveItems(lb2,lb1,false);
      else if (btn == btn3)
    MoveItems(lb1,lb2,false);
      else if (btn == btn4)
    MoveItems(lb1,lb2,true);

    }void MoveItems(ListBox lbFrom, ListBox lbTo, bool bAll)
    {
      int i=0;
      while (i < lbFrom.Items.Count)
      {
    if (bAll || lbFrom.Items[i].Selected)
    {
    lbFrom.Items[i].Selected=false;
    lbTo.Items.Add(lbFrom.Items[i]); 
    lbFrom.Items.RemoveAt(i);
    }
    else 
    i++;
      }}</script>
      

  4.   

    你可以用js写两个listbox联动啊
      

  5.   

    回复人: lovefootball(蟑螂) ( ) 信誉:98  2005-08-11 12:25:00  得分: 0  
     
     
       你可以用js写两个listbox联动啊
      
     
    如果用js写的话,最后获取所得到的listbox的值是如何来获取啊?如果用javascript的话,那么‘目的’listbox的值就无法在服务器端获取了
      

  6.   

    回复人: saucer(思归) ( ) 信誉:371 关于requiredfieldvalidator的问题,确实如你所言,是因为调用了pagevalidate(),现在去掉后,果然好了。但是关于两个listbox相互移动的问题,不知道老兄有没有js的示例代码,另外,如果用js的话,后面获取‘目的’listbox的值的时候如何操作?