c# - asp.net c# 代码在 Firefox 上无法正常工作,在其他浏览器上工作正常

标签 c# asp.net firefox google-chrome

我编写了一个应用程序,用于扫描订单并根据每个产品的数据库中定义的状态流更改其状态。

当我扫描一个 block (订单行的一部分)时,例如一本书的封面( block 1)和一本书的内容( block 2)。它们都在同一个订单行中,订单行又是订单的一部分,可以包含更多订单行。

只有当所有其他订单行的状态均为“正在发货”时,订单才能设置为“已发货”,只有当订单行中的所有其他 block 都具有至少相同的状态时,才能将 block 设置为下一个状态,或更高。

示例:

状态流 = 新、生产、运输、已发货

block 1状态=新 block 2 状态 = 新

已扫描 block 1

chunk1 状态 = 生产 block 2 状态 = 新

已扫描 block 1

“无法完成,chunk2 必须首先具有状态生产”

已扫描 block 2

chunk1 状态 = 生产 chunk2状态=生产

这一切在 IE 和 google chrome 中都能正常工作。

但是当我在 Firefox 中执行这段代码时,它并没有按照我想要的方式工作。我没有收到任何异常或错误。

然后它的工作方式就像示例:

状态流 = 新、生产、运输、已发货

block 1状态=新 block 2 状态 = 新

block 1 扫描

block 1 状态 = 生产 block 2 状态 = 新

已扫描 block 2

block 1 状态 = 生产 block 2 状态 = 运输

现在,在 Firefox 中,当扫描一个 block 时,它会跳过一个步骤。就像我的代码在扫描时不会查找 block 2 来获取当前 block 状态,而是查找 block 1 的状态。

代码:

protected void BarCodeTextBox_TextChanged(object sender, EventArgs e)
    {
        InfoPanel.Hide();

        if (BarCodeTextBox.Text.Length > 4 && validBarcodeInput)
        {
            if (BarCodeTextBox.Text == currBarcodeLabel.Text || BarCodeTextBox.Text == string.Format("B{0}", currBarcodeLabel.Text))
            {
                secondscanstring = "true";
                secondScan = true;
            }
            else
            {
                secondscanstring = "false";
                secondScan = false;
            }

            if (Chunk.OrderLine.Order.OrderId == int.Parse(currOrderIdLabel.Text))
            {
                secondscanstring = "true";
                secondScan = true;
            }

            BindData();                               

            UpdateStatus();                
        }
        else
        {
            BarCodeTextBox.Text = "";
            InfoPanel.ErrorMessage = "ongeldige barcode!";
            InfoPanel.ShowErrorMessage();
            return;
        }
    }


private void UpdateStatus()
    {            
        if (!StatusMessageChecked.Checked && StatusMessageChecked.Visible)
        {
            AgreeConfirmation.Visible = true;
            return;
        }

        IProductRepository prodRep = RepositoryFactory.CreateProductRepository();
        IOrderRepository orderRep = RepositoryFactory.CreateOrderRepository();

        OrderLineChunk chunk = orderRep.GetOrderLineChunkById(Barcode);

        if (chunk == null)
        {
            InfoPanel.ErrorMessage = "ongeldige barcode!";
            InfoPanel.ShowErrorMessage();
            return;
        }

        List<Status> statusFlowList = new List<Status>();

        string statusFlowString = prodRep.GetStatusFlowForProduct(chunk.OrderLine.Product.ProductId);

        string[] statusIdS = statusFlowString.Split(',');

        foreach (string statusId in statusIdS)
        {
            int id = int.Parse(statusId);

            Status status = orderRep.GetStatusById(id);

            statusFlowList.Add(status);
        }

        int currStatusId = chunk.Status.StatusId;

        int count = 0;
        int newIndex = 0;

        foreach (Status s in statusFlowList)
        { 
            if(s.StatusId == currStatusId)
            {
                if (count == statusFlowList.Count - 1)
                {
                    newIndex = count;
                }
                else
                {
                    newIndex = count + 1;
                }
                break;
            }
            count++;
        }

        if (newIndex > 0 && newIndex <= statusFlowList.Count - 1)
        {
            if (chunk.Status.Name == Status.InProduction.Name && chunk.OrderLine.Status.Name != Status.InProduction.Name)
            {
                InfoPanel.ErrorMessage = string.Format("kan de status niet veranderen omdat nog niet alle chunks in deze order de status '<b>{0}</b>' hebben", Status.InProduction.Description.ToLower());
                InfoPanel.ShowErrorMessage();
                return;
            }
            else if (chunk.Status.Name == Status.Binding.Name && chunk.OrderLine.Status.Name != Status.Binding.Name)
            {
                InfoPanel.ErrorMessage = string.Format("kan de status niet veranderen omdat nog niet alle chunks in deze order de status '<b>{0}</b>' hebben", Status.Binding.Description.ToLower());
                InfoPanel.ShowErrorMessage();
                return;
            }
            else if (chunk.Status.Name == Status.Shipping.Name && chunk.OrderLine.Status.Name != Status.Shipping.Name)
            {
                InfoPanel.ErrorMessage = string.Format("kan de status niet veranderen omdat nog niet alle chunks in deze order de status '<b>{0}</b>' hebben", Status.Shipping.Description.ToLower());
                InfoPanel.ShowErrorMessage();
                return;
            }
            else if (chunk.Status.Name == Status.Glue.Name && chunk.OrderLine.Status.Name != Status.Glue.Name)
            {
                InfoPanel.ErrorMessage = string.Format("kan de status niet veranderen omdat nog niet alle chunks in deze order de status '<b>{0}</b>' hebben", Status.Glue.Description.ToLower());
                InfoPanel.ShowErrorMessage();
                return;
            }
            else
            {
                if (secondScan || chunk.OrderLine.Order.Status.Name == Status.Shipping.Name)
                {
                    Status newStatus = statusFlowList[newIndex];

                    if (chunk.OrderLine.Order.Status == Status.Shipping)
                    {
                        chunk.OrderLine.Order.ChangeStatusTo(Status.Shipped);

                        sendShippedMail();
                    }
                    else
                    {
                        chunk.ChangeStatusTo(newStatus, Status.Action.UpdateParent);
                    }
                }
            }                
        }
        else
        {
            InfoPanel.ErrorMessage = string.Format("Er is een fout opgetreden!");
            InfoPanel.ShowErrorMessage();
        }

        BindData();

        currBarcodeLabel.Text = Barcode.ToString();
        currOrderIdLabel.Text = Order.OrderId.ToString();
        secondScanLabel.Text = secondscanstring;
        BarCodeTextBox.Text = String.Format("B{0}", Barcode);
    }

    protected void CancelButton_Click(object sender, ImageClickEventArgs e)
    {
        IOrderRepository repository = RepositoryFactory.CreateOrderRepository();

        if (Order != null)
        {
            OrderLineChunk chunk = repository.GetOrderLineChunkById(Barcode);

            chunk.Status = Status.Canceled;
            repository.UpdateOrderLineChunk(chunk);

            BindData();
        }
    }


private void BindData()
    {
        PrintPakbonLink.Visible = false;           

        if (Order != null)
        {
            if (StatusMessageChecked.Checked)
            {
                AgreeConfirmation.Visible = false;
            }
            OrderInfoPanel.Visible = true;
            OrderIdLink.Text = string.Format("<b>{0}</b>", Order.OrderId);
            OrderIdLink.NavigateUrl = string.Format("OrderDetails.aspx?OrderId={0}", Order.OrderId);

            OrderDateLabel.Text = Order.Date.ToString();

            SubShopLabel.Text = string.Format("Subshop: <span class='orange'>{0}", Order.Customer.SubShop.Name);
            CustomerLabel.Text = string.Format("Klant: <span class='orange'>{0} ({1})</span>", Order.Customer.FullName, Order.Customer.UserId);

            if (Order.ShippingAddress != null)
            {
                BindShippingAddress(Order.ShippingAddress);
            }

            if (Order.BillingAddress != null)
            {
                BindBillingAddress(Order.BillingAddress);
            }
            else
            {
                BindBillingAddress(Order.ShippingAddress);
            }

            if (Order.Status.StepPosition >= Status.Shipping.StepPosition)
            {
                PrintPakbonLink.NavigateUrl = string.Format("Reports.aspx?ReportType={0}&OrderId={1}", (int)Reports.ReportType.Pakbon, Order.OrderId);
                PrintPakbonLink.Visible = true;
            }

            if (Order.StatusHistory.Where(s => !string.IsNullOrEmpty(s.Message)).Any())
            {
                StringBuilder message = new StringBuilder();

                var messages = from s in Order.StatusHistory
                               where !string.IsNullOrEmpty(s.Message)
                               orderby s.Date descending
                               select s;

                foreach (var m in messages)
                {
                    if (message.Length == 0)
                    {
                        message.AppendLine("Status meldingen voor deze order<br/><br/>");
                        StatusMessageChecked.Visible = true;
                    }

                    message.AppendLine(string.Format("<FONT COLOR=\"#FF0000\">(<small><b>{0}</b></small>) {1}</FONT><br/>", m.Date, m.Message));
                }

                StatusMessageHistoryLabel.Text = message.ToString();
            }
            else
            {
                StatusMessageHistoryLabel.Text = string.Empty;
            }
        }
        else
        {
            OrderInfoPanel.Visible = false;
            SubShopLabel.Text = "";
            CustomerLabel.Text = "";

            BindShippingAddress(new Address());
            BindBillingAddress(new Address());
        }

        ChunkGrid.DataBind();
        ChunkGrid.HighlightRow(Barcode);
    }

我的aspx代码

<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
    <div style="clear: both;">
        <aq:InfoPanel runat="server" ID="InfoPanel" />
    </div>
    <div id="barCodeScannerContentBig">
        <div id="orderDetails">
            <div id="orderDetailsBlock">
                <span class="barCodeHeader">Toegekende barcode</span><br />
                <br />
                <asp:TextBox ID="BarCodeTextBox" runat="server" OnTextChanged="BarCodeTextBox_TextChanged"
                    TabIndex="0" AutoPostBack="true" />
                <br />
                <asp:RequiredFieldValidator ID="requiredfieldvalidator2" runat="server" SkinID="FieldValidator"
                    ControlToValidate="BarCodeTextBox" ErrorMessage="Barcode is verplicht" />
                <br />
                <br />                
                <asp:Label ID="secondScanLabel" runat="server" Text="Huidige barcode: " />
                <asp:Label ID="currBarcodeLabel" runat="server" /><br />
                order: <asp:Label ID="currOrderIdLabel" runat="server" />
                <br />
                <br />

            </div>
            <div id="orderDetailsBlockBordBarCodeTextBoxerLeft">
                <span class="barCodeHeader">Gescande artikel</span><br />
                <br />
                Informatie over het gescande artikel.
                <br />
                <br />
                <asp:Panel runat="server" ID="OrderInfoPanel" Visible="false">
                    Order
                    <asp:HyperLink runat="server" ID="OrderIdLink" CssClass="orange" Text="" NavigateUrl="~/OrderDetails.aspx?OrderId=" />
                    van
                    <asp:Label runat="server" ID="OrderDateLabel" />
                </asp:Panel>
                <br />
                <asp:Label runat="server" ID="SubShopLabel" Text="" />
                <br />
                <asp:Label runat="server" ID="CustomerLabel" Text="" />
                <br />
            </div>
        </div>
    </div>
    <br />
    <div style="clear: both; width: 668px">
        <div style="width: 150px; float: left">
            <asp:ImageButton runat="server" ID="GoToDashBoardImageButton" ImageUrl="~/App_Themes/Default/button_naar_dashboard.PNG"
                PostBackUrl="~/Default.aspx" Style="margin: 10px 0px 0px 0px;" CssClass="btnLeft"
                CausesValidation="false" />
        </div>
        <div style="width: 318px; float: left; padding:10px 10px 0px 10px; text-align: center;">
        <asp:Panel ID="AgreeConfirmation" runat="server" Visible="false" CssClass="errorInfoPanel">
                    Niet akkoord gegaan met de foutmelding!</asp:Panel>
            <asp:Panel runat="server" ID="StatusMessagePanel">
                <asp:Label runat="server" ID="StatusMessageHistoryLabel"></asp:Label>
            </asp:Panel>
        <asp:CheckBox ID="StatusMessageChecked" runat="server" Text=" Akkoord" Visible="false" />
        </div>
        <div style="width: 100px; float: left">
            <asp:HyperLink runat="server" ID="PrintPakbonLink" Target="_blank" CssClass="btnRight"
                Style="margin: 10px 5px 20px 0px;">
        <asp:Image runat="server" ImageUrl="~/App_Themes/Default/button_print_pakbon.PNG" AlternateText="Pakbon afdrukken" />

            </asp:HyperLink>
        </div>
        <div style="width: 80px; float: right">
            <asp:ImageButton runat="server" ID="AgreeButton" ImageUrl="~/App_Themes/Default/button_akkoord.png"
                CssClass="btnRight" Style="margin: 10px 0px 0px 0px;" OnClick="AgreeButton_Click"/>                     
        </div>
    </div>
    <%--<asp:ImageButton runat="server" ID="PrintEtiketImageButton" ImageUrl="#" AlternateText="Print etiket"
        CssClass="btnRight" Style="padding: 5px 0px 0px 0px;" OnClick="PrintEtiketImageButton_Click" />--%>
    <div id="detailedOrderInformation">
        <br />
        <br />
        <br />
        <span class="barCodeHeader">Gedetailleerde order informatie</span>
        <br />
        <br />
        <asp:UpdatePanel runat="server" ID="OrdersUpdatePanel">
            <ContentTemplate>
                <aq:ChunkGrid runat="server" ID="ChunkGrid" ObjectDataSourceId="OrderLineChunksDataSource" />
            </ContentTemplate>
        </asp:UpdatePanel>
    </div>
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <div class="adressHeader">
    </div>
    <div class="orderBlockLeft">
        <table class="OrderDetailTable">
            <tr>
                <td class="tableLabel" valign="top" width="120">
                    Naam
                </td>
                <td>
                    <asp:Label runat="server" ID="ShippingAddressNameLine1Label" />
                </td>
            </tr>
            <tr>
                <td colspan="2" class="buffer">
                </td>
            </tr>
            <tr>
                <td class="tableLabel" valign="top" width="120">
                    Adres
                </td>
                <td>
                    <asp:Label runat="server" ID="ShippingAddressAddressLine1Label" />
                </td>
            </tr>
            <tr>
                <td colspan="2" class="buffer">
                </td>
            </tr>
            <tr>
                <td class="tableLabel" valign="top" width="120">
                    Plaats
                </td>
                <td>
                    <asp:Label runat="server" ID="ShippingAddressCityLabel" />
                </td>
            </tr>
            <tr>
                <td class="tableLabel" valign="top" width="120">
                    Postcode
                </td>
                <td>
                    <asp:Label runat="server" ID="ShippingAddressPostalCodeLabel" />
                </td>
            </tr>
            <tr>
                <td class="tableLabel" valign="top" width="120">
                    Land
                </td>
                <td>
                    <asp:Label runat="server" ID="ShippingAddressCountryLabel" Width="146" />
                </td>
            </tr>
        </table>
    </div>
    <div class="orderBlockRight" style="width: 320px">
        <table class="OrderDetailTable">
            <tr>
                <td class="tableLabel" valign="top" width="120">
                    Naam
                </td>
                <td>
                    <asp:Label runat="server" ID="BillingAddressNameLine1Label" />
                </td>
            </tr>
            <tr>
                <td colspan="2" class="buffer">
                </td>
            </tr>
            <tr>
                <td class="tableLabel" valign="top" width="120">
                    Adres
                </td>
                <td>
                    <asp:Label runat="server" ID="BillingAddressAddressLine1Label" />
                </td>
            </tr>
            <tr>
                <td colspan="2" class="buffer">
                </td>
            </tr>
            <tr>
                <td class="tableLabel" valign="top" width="120">
                    Plaats
                </td>
                <td>
                    <asp:Label runat="server" ID="BillingAddressCityLabel" />
                </td>
            </tr>
            <tr>
                <td class="tableLabel" valign="top" width="120">
                    Postcode
                </td>
                <td>
                    <asp:Label runat="server" ID="BillingAddressPostalCodeLabel" />
                </td>
            </tr>
            <tr>
                <td class="tableLabel" valign="top" width="120">
                    Land
                </td>
                <td>
                    <asp:Label runat="server" ID="BillingAddressCountryLabel" Width="146" />
                </td>
            </tr>
        </table>
        <br />
        <br />
        <%-- <asp:ImageButton runat="server" ID="profileCustomer" ImageUrl="~/App_Themes/Default/button_profile.PNG"
                    CssClass="btnRight" />--%>
    </div>
    <div style="clear: both">
        &nbsp;<br />
    </div>
    <asp:ObjectDataSource ID="OrderLineChunksDataSource" runat="server" TypeName="ChrisRussell.Data.Repository.Interfaces.IOrderRepository"
        DataObjectTypeName="ChrisRussell.Data.Order" SelectMethod="GetAllOrderLineChunksForOrder"
        OnObjectCreating="OrderLineDataSource_ObjectCreating" OnObjectDisposing="DataSource_ObjectDisposing"
        OnSelecting="OrderLineChunksDataSource_Selecting"></asp:ObjectDataSource>
    <div style="clear: both">
        &nbsp;<br />
        <br />
    </div>
</asp:Content>

|||||||||||||||||||||||||||||||已回答||||||||||||| |||||||||||||||||||||||

我解决了自己的问题霍根给了我一个巨大的插入,朝着好的方向发展。正如他所说,我的错误必须出在 aspx 代码中。所以我探索了 C# 计算的每一点。在 aspx 文本字段中,我显示了我稍后在计算中使用的旧 orderid。

现在我也将该值存储在字符串中,因此它与浏览器无关。

最佳答案

这一切看起来都很复杂,但你说问题因浏览器而异,所以问题一定出在 HTML 上。我在您发布的代码中只看到一个 HTML 问题,因此请尝试修复该问题:

改变

"Subshop: <span class='orange'>{0}"

"Subshop: <span class='orange'>{0}</span>"

如果这不能解决问题,那么您将不得不向我们展示 apsx 页面,因为您的 HTML 中一定存在拼写错误,导致不同的浏览器表现不同。

(注意 - 我知道这可能是请求或响应,但这种情况很少见,因为 apsx 文件可能会通过多种方式导致此问题。)

关于c# - asp.net c# 代码在 Firefox 上无法正常工作,在其他浏览器上工作正常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7241463/

相关文章:

javascript - 我如何制作一个外观和行为都像切换按钮的浏览器操作按钮

c# - Entity Framework 多重聚合性能

c# - 如何用 C# 打开第二个窗口选择菜单(Start+P)?

javascript - 为 Web 应用程序添加延迟

c# - "Data Massage"是什么意思?

javascript - 使用 cfx xpi 时 Firefox Add-on SDK 出现错误,而 cfx run 运行良好

c# - 如何在 Dapper.NET 中添加动态搜索值

c# - 写入字节时如何使字节随机?

javascript - 确认删除弹出窗口并显示记录计数

css - Firefox li href CSS 选择器