Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 页面控件在回发后丢失ViewState_C#_Asp.net_Controls_Postback_Viewstate - Fatal编程技术网

C# 页面控件在回发后丢失ViewState

C# 页面控件在回发后丢失ViewState,c#,asp.net,controls,postback,viewstate,C#,Asp.net,Controls,Postback,Viewstate,我有一个奇怪的问题,关于我们的一个.aspx页面和该页面上的控件在该页面被发回后丢失ViewState数据 这不是生产中的问题,但似乎只是visual studio中本地运行的问题 复制步骤: 我访问了一个产品页面,再次从下拉列表中选择一种产品类型。这在生产中运行良好,并且两个代码库相同-下拉列表设置为AutoPostback 然后我将产品添加到我的篮子中-这涉及到另一个回发 在这里逐步浏览代码,我可以看到许多控件(如下拉列表)的SelectedItem属性为null。 下面是相关代码片段的一个

我有一个奇怪的问题,关于我们的一个.aspx页面和该页面上的控件在该页面被发回后丢失ViewState数据

这不是生产中的问题,但似乎只是visual studio中本地运行的问题

复制步骤:

我访问了一个产品页面,再次从下拉列表中选择一种产品类型。这在生产中运行良好,并且两个代码库相同-下拉列表设置为AutoPostback 然后我将产品添加到我的篮子中-这涉及到另一个回发 在这里逐步浏览代码,我可以看到许多控件(如下拉列表)的SelectedItem属性为null。 下面是相关代码片段的一个小示例

填充产品类型下拉列表:

if (!Page.IsPostBack)
{
    Product product = ProductsDALC.FetchBySeoUrl(Request.QueryString["url"]);

    ddlOptions.DataSource = product.ActiveVariants;
    ddlOptions.DataBind();
    ddlOptions.Items.Insert(0, new ListItem("Please choose an option.", "-1"));

    pnlOptions.Visible = product.ActiveVariants.Count > 1;
}
将产品添加到篮子中:

protected void btnAddToCart_Click(object sender, EventArgs e)
{
    Product product = ProductsDALC.FetchBySeoUrl(Request.QueryString["url"]);

    int quantity = 0;
    quantity = Convert.ToInt32(ddlQuantity.SelectedValue);

    if ((ddlOptions.SelectedValue != "-1" && !ddlOptions.SelectedValue.Contains("~NA")) || product.ActiveVariants.Count == 1)
    {
        int variantId = product.DefaultVariant.Id;
        if (product.ActiveVariants.Count > 1)
        {
            variantId = Helpers.CartHelper.GetVariantIdFromDDL(ddlOptions.SelectedValue);
        }

        if (quantity > 0)
        {
            if (product.ActiveVariants.VariantById(variantId).CanBeSold)
            {
                CartItem item = product.CartItem(product.ActiveVariants.VariantById(variantId));
                item.Thumbnail = product.Imaging.MainImage.Images.ByType("Thumbnail").HtmlUrl;
                item.SeoUrl = UrlHelper.Url(UrlHelper.PageType.Product, product, false);
                CartHelper.Add(item, quantity);
                this.Master.RebindBasketWithMessage();
            }
        }
     }
}
将项目添加到篮子后,代码跳过页面加载,因为它是回发,然后进入btnAddToCart\u Click方法。在这里,它失败于:

Convert.ToInt32(ddlQuantity.SelectedValue);
检查我看到的值。检查此控件的SelectedItem时,我可以看到它为空

相同的代码在此失败:

Product p = ProductsDALC.FetchBySeoUrl(Request.QueryString["url"]);

foreach (var variant in p.Variants)
{
      if (ddlOptions.SelectedItem.Text.Contains(variant.Description))
      {
          if (variant.OutOfStockStatusId == 2 && variant.LiveStock && variant.StockLevel <= 0)
          {
               litStockStatus.Text = "<span class=\"in-stock\">Stock in 3-5 days</span>";
          }
          else
          {
               litStockStatus.Text = "<span class=\"in-stock\">In stock</span>";
          }
      }
}
当代码到达ddlOptions.SelectedItem(也是null)时,将引发null引用异常。就好像控件在回发过程中失去了状态,但只是在本地

我已搜索解决方案,以防有人设置:

EnableViewState=false


没有发现任何实例。我不知下一步该怎么办?以前有人遇到过这种情况吗?

这不是解决方案,但是如果您添加一个TextBox控件并在iPostBack部分为其分配一些文本,会发生什么情况?您说SelectedItem为空。。。下拉列表中是否有任何项目,因为其中只丢失了selecteditem或根本没有项目?@DaveZych在访问页面时,下拉列表中填充了产品类型,选择类型会导致回发,然后所有的项目都会从控件中丢失。@Remy现在尝试一下,谢谢还有其他几种方法可以禁用视图状态,看看这篇文章,