none
奇怪的问题... RRS feed

  • 问题

  •  

     AJAX

      一个 updatepanel    里面 一个  GridView 一个 dropdownlist  一个  插入数据表单 

     

    在IE里怎么用都没事! 

     

    在FF 里 一般情况下没事....  但是 如果 插入过数据 过修改过数据  以后 点刷新   在IE 里是不会   有任何问题 但是在 FF里   却不行  因为在FF里 刷新 会再次 postback 就是 执行我上次的修改操作  或插入操作之类的  然后就会引发异常

     

     

    而且 FF的错误控制台 会显示乱码... 

     

    只看懂 calling method: [nsIDOMEventListener::handleEvent 

     

     我觉得 是 scriptManager  在调用服务器端方法 时  失败 造成的    

    也就是说 再次刷新时 在执行默认的一些数据源select方法之前  先再次异步执行了  update 或insert  然后 就出了问题....

     

    再点任何 按钮 试图操作时 都无效 整个脚本似乎 都无法正常工作 ...

     

    错误: [Exception... "'Sys.WebForms.PageRequestManagerServerErrorException: Sys.WebForms.PageRequestManagerServerErrorException: du„¶áoàH ïýò_O' when calling method: [nsIDOMEventListener::handleEvent]"  nsresult: "0x8057001c (NS_ERROR_XPC_JS_THREW_JS_OBJECT)"  location: "<unknown>"  data: no]

    2008年10月7日 18:25

答案

  •  

    请问你用FireFox2的话会有问题吗? 如果没问题的话,我建议暂时别用FireFox3. 新产品出来后肯定会有不少的bug.过一段时间应该就会修复的.

     

    对于你的第二个问题,用ObjectDataSource的话BLL里的Update方法的参数必须跟ObjectDataSource的UpdateParameters完全匹配.如果你只需要四个参数,那么就要把aspx里多加的那个Parameter去掉.

    2008年10月10日 2:26
    版主

全部回复

  •  

    ... 恩 果然是那个原因 ..

     

    我在每次 载入页面前 先给 控件 dispose()一下 FF就也可以 正常工作了.

     

    但是我就不明白 为啥IE 没事 FF就不行? 难道是 微软写的脚本 居然会 没考虑 浏览器兼容性 ???

     

    这就是传说中的的bug?

    2008年10月7日 19:34
  • 你好,

     

    能否提供能够重现问题的完整代码和步骤?

     

    2008年10月9日 8:15
    版主
  • 过程就是   比如 我选择 GridView 中的某项数据后更新   然后刷新  再进行 异步 操作 都无效   提示

    呢就是那个乱码的    而ie下 怎么用都没任何问题....

     

    FF 最离谱 的是  有时候.  我没刷新 就放那.  过个10分钟  再点  也 出现异常!!!

     

     

    aspx-------------------------------------------------------------------------------------------------------------------------------------------------------------

    <aspTongue TiedcriptManager ID="ScriptManager1" runat="server">
        </aspTongue TiedcriptManager>    
        <asp:UpdatePanel ID="UpdatePanel1" runat="server">
            <ContentTemplate>
                  
               
                <asp:GridView ID="GridView1" runat="server" DataSourceID="ObjectDataSource1"
            AutoGenerateColumns="False" DataKeyNames="u_sysid"
                    onrowupdated="GridView1_RowUpdated">
                    <Columns>
                        <asp:CommandField ShowEditButton="True" />
                        <asp:TemplateField HeaderText="系统ID">
                            <ItemTemplate>
                                <asp:Label ID="Label2" runat="server" Text='<%# Bind("u_sysid") %>'></asp:Label>
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:BoundField DataField="u_username" HeaderText="用户名" />
                        <asp:BoundField DataField="u_pw" HeaderText="密码" />
                        <asp:BoundField DataField="u_e_mail" HeaderText="电子信箱" />
                        <asp:TemplateField HeaderText="注册日期">
                            <ItemTemplate>
                                <asp:Label ID="Label1" runat="server" Text='<%# Bind("u_jointime") %>'></asp:Label>
                            </ItemTemplate>
                        </asp:TemplateField>
                    </Columns>
                </asp:GridView>
               
                <asp:Label ID="Label3" runat="server" Text="请选择您要查询的ID"></asp:Label>
                :
                <aspBig SmileropDownList ID="DropDownList1" runat="server" AutoPostBack="True"
                    DataSourceID="ObjectDataSource2" DataTextField="u_username"
                    DataValueField="u_sysid" AppendDataBoundItems="True"
                    CausesValidation="True">
                    <asp:ListItem Value="0">请选择用户</asp:ListItem>
                </aspBig SmileropDownList>
               
                <br />
               
                <aspBig SmileetailsView ID="DetailsView1" runat="server"
                    DataSourceID="ObjectDataSource3" Height="50px" Width="125px">
                    <Fields>
                        <asp:CommandField ShowInsertButton="True" />
                    </Fields>
                </aspBig SmileetailsView>
               
                <br />        
            </ContentTemplate>
            <Triggers>
                <asp:AsyncPostBackTrigger ControlID="GridView1" />
                <asp:AsyncPostBackTrigger ControlID="DetailsView1" />
                <asp:AsyncPostBackTrigger ControlID="DropDownList1" />
            </Triggers>
        </asp:UpdatePanel>
       


        <aspSurprisebjectDataSource ID="ObjectDataSource1" runat="server"
                    SelectMethod="GetDataSet_userinfo"
                    TypeName="DoNet_AJAX_Mxjia.SqlCtrl_StorePorcedure_userinfo"
                    UpdateMethod="UpDate_userinfo" InsertMethod="Insert_userinfo">
                    <UpdateParameters>
                        <aspStick out tonguearameter Name="u_username" Type="String" />
                        <aspStick out tonguearameter Name="u_pw" Type="String" />
                        <aspStick out tonguearameter Name="u_e_mail" Type="String" />
                        <aspStick out tonguearameter Name="u_jointime" Type="String" />
                        <aspStick out tonguearameter Name="u_sysid" Type="Int32" />
                    </UpdateParameters>
                    <SelectParameters>
                        <asp:ControlParameter ControlID="DropDownList1" DefaultValue="8" Name="u_sysid"
                            PropertyName="SelectedValue" Type="Int32" />
                    </SelectParameters>
                    <InsertParameters>
                        <aspStick out tonguearameter Name="u_username" Type="String" />
                        <aspStick out tonguearameter Name="u_pw" Type="String" />
                        <aspStick out tonguearameter Name="u_e_mail" Type="String" />
                        <aspStick out tonguearameter Name="u_jointime" Type="String" />
                        <aspStick out tonguearameter Name="u_sysid" Type="Int32" />
                    </InsertParameters>
                </aspSurprisebjectDataSource>


        <aspSurprisebjectDataSource ID="ObjectDataSource2" runat="server"
                    SelectMethod="GetDataSet_userinfo"
                    TypeName="DoNet_AJAX_Mxjia.SqlCtrl_StorePorcedure_userinfo">
                </aspSurprisebjectDataSource>
        
        <aspSurprisebjectDataSource ID="ObjectDataSource3" runat="server"
            InsertMethod="Insert_userinfo" SelectMethod="GetDataSet_userinfo"
            TypeName="DoNet_AJAX_Mxjia.SqlCtrl_StorePorcedure_userinfo">
            <SelectParameters>
                <aspStick out tonguearameter DefaultValue="ALL" Name="all" Type="String" />
            </SelectParameters>
            <InsertParameters>
                <aspStick out tonguearameter Name="u_username" Type="String" />
                <aspStick out tonguearameter Name="u_pw" Type="String" />
                <aspStick out tonguearameter Name="u_e_mail" Type="String" />
                <aspStick out tonguearameter Name="u_jointime" Type="String" />
                <aspStick out tonguearameter Name="u_sysid" Type="Int32" />
            </InsertParameters>
        </aspSurprisebjectDataSource>

    cs-------------------------------------------------------------------------------------------------------------------------------------------------------------

     

     protected void Page_Load(object sender, EventArgs e)
            {
                ScriptManager1.Dispose();
                UpdatePanel1.Dispose();
                GridView1.Dispose();
                DropDownList1.Dispose();
                DetailsView1.Dispose();
                ObjectDataSource1.Dispose();
                ObjectDataSource2.Dispose();
                ObjectDataSource3.Dispose();
                       }
    这些是后加的. 如果不加. 在 FireFox3.0中 就会出现 前面描述的问题 

     

     

     

    sql-------------------------------------------------------------------------------------------------------------------------------------------------------------

     

     

     public DataSet GetDataSet_userinfo(int u_sysid)
            {

                    SqlConnection Conn = new SqlConnection();
                    Conn.ConnectionString = ConnectString;
                    SqlDataAdapter Ada = new SqlDataAdapter();
                    Ada.SelectCommand = new SqlCommand("Select_userinfo",Conn);
                    Ada.SelectCommand.CommandType = CommandType.StoredProcedure;
                    Ada.SelectCommand.Parameters.AddWithValue("@u_sysid", u_sysid);       
                    DataSet Ds = new DataSet();
                    Ada.Fill(Ds, "temp");
                    Conn.Close();
                    return Ds;

            }

           public void UpDate_userinfo(string u_username,string u_pw,string u_e_mail,string u_jointime,int u_sysid)
            { // 这里我有个疑问... 我本来只需要4个参数  但是 写方法时 却不得不 全部都写上.否则就报告 泛型方法错误那个

    //有什么办法. 能让GridView update时只传出我需要的参数呢? 那些不需要更新的参数传进来 浪费啊!
                
                SqlConnection Conn = new SqlConnection();
                Conn.ConnectionString = ConnectString;
                SqlCommand Cmd = new SqlCommand();
                Cmd.Connection = Conn;
                Cmd.CommandType = CommandType.StoredProcedure;
                Cmd.CommandText = "UpDate_userinfo";
                Cmd.Parameters.AddWithValue("@u_username", u_username);
                Cmd.Parameters.AddWithValue("@u_pw",u_pw);
                Cmd.Parameters.AddWithValue("@u_e_mail", u_e_mail);
                Cmd.Parameters.AddWithValue("@u_sysid", u_sysid);
                Conn.Open();
                Cmd.ExecuteNonQuery();
                Conn.Close();

            }

     

    public void Insert_userinfo(string u_username, string u_pw,string u_e_mail,string u_jointime,string u_info, int u_sysid)
            { // 这里我的参数 问题同上. 我根本不需要那么多参数 .可是不写就报错.

    //如何设置 数据控件 传哪些 字段呢?
                SqlConnection Conn = new SqlConnection();
                Conn.ConnectionString = ConnectString;
                SqlCommand Cmd = new SqlCommand();
                Cmd.Connection = Conn;
                Cmd.CommandText = "Insert_userinfo";
                Cmd.CommandType = CommandType.StoredProcedure;
                Cmd.Parameters.AddWithValue("@u_username", u_username);
                Cmd.Parameters.AddWithValue("@u_pw", u_pw);
                Cmd.Parameters.AddWithValue("@u_e_mail",u_e_mail);
                Conn.Open();
                Cmd.ExecuteNonQuery();
                Conn.Close();
               
            }

     

    存储过程  就不帖了 就是 简单的 select update 之类的   

    2008年10月9日 14:59
  •  

    请问你用FireFox2的话会有问题吗? 如果没问题的话,我建议暂时别用FireFox3. 新产品出来后肯定会有不少的bug.过一段时间应该就会修复的.

     

    对于你的第二个问题,用ObjectDataSource的话BLL里的Update方法的参数必须跟ObjectDataSource的UpdateParameters完全匹配.如果你只需要四个参数,那么就要把aspx里多加的那个Parameter去掉.

    2008年10月10日 2:26
    版主
  • FireFox3+ 里的一些兼容性问题确实比较头疼的。

     

    2008年10月12日 2:43
    版主