【问题标题】:Weird compile problem when adding dynamic rating controls添加动态评级控件时出现奇怪的编译问题
【发布时间】:2011-04-18 20:06:31
【问题描述】:

我正在使用 ajax controlkit 将 ratingcontrols 动态添加到预定义表的某个列中,该控件的 maxrating 取决于他之前的列。

无论如何,当使用动态控件时,我了解到您应该在每次页面加载时重新添加它们,所以我添加了一个 Session 变量,让我 - 当第一次没有加载页面时boolean 为 true - 添加这些评级控件及其事件(已更改)由此页面上的事件处理程序处理。

这些是处理评级事件和动态添加到表中列的 2 个代码块:

  1. 事件

    protected void Page_Load(object sender, EventArgs e)
    {
    
    if (!Page.IsPostBack)
    {
        ScriptManager1.RegisterAsyncPostBackControl(imbGebruikers);
        ScriptManager1.RegisterAsyncPostBackControl(imbModellen);
        imbvolgende.Enabled = true;
        ddlGebruikers.Items.Add(new ListItem("", ""));
        String ingelogdegebruikerid = (String)Session["gebruikerid"];
        lbl1.Text = "Evaluator : " + Database.geefGebruikerNaam(ingelogdegebruikerid);
    
        IEnumerator<EvaluatieFormulier> evaluatieformulieren = Database.laadFormulierenIn().GetEnumerator();
        List<EvaluatieFormulier> mijnformulieren = new List<EvaluatieFormulier>();
        Session["mijnformulieren"] = mijnformulieren;
        while (evaluatieformulieren.MoveNext())
        {
            if (((evaluatieformulieren.Current.GebruikerevaluatorID.ToString() == ingelogdegebruikerid) && (evaluatieformulieren.Current.Afgewerkt == "nee")))
                mijnformulieren.Add(evaluatieformulieren.Current);
        }
    
        IEnumerator<EvaluatieFormulier> mijnenumerator = mijnformulieren.GetEnumerator();
        while (mijnenumerator.MoveNext())
        {
            String geevalueerdenaam = Database.geefGebruikerNaam(mijnenumerator.Current.GebruikergeevalueerdID);
            Boolean ziteralin = false;
            foreach (ListItem item in ddlGebruikers.Items)
            {
                if (item.Text == geevalueerdenaam)
                    ziteralin = true;
            }
            if (!ziteralin)
                ddlGebruikers.Items.Add(new ListItem(geevalueerdenaam, mijnenumerator.Current.GebruikergeevalueerdID));
        }
        imbFormulier.Visible = false;
    
        Session["formulieractief"] = false;
    }
    else
    {
        //Re-add the rating controls to my table IF the page is not being loaded for the first time && this boolean is true(the table is being shown)
        Boolean formulieractief = (Boolean)Session["formulieractief"];
    
        if (formulieractief)
        {
            Evaluatieform mijnform = (Evaluatieform)Session["formulier"];
            List<DomeinsCriteriums> domeincontrolenum = mijnform.controls;
            AjaxControlToolkit.Rating dynamischeratingcontrol = new AjaxControlToolkit.Rating();
            dynamischeratingcontrol.FilledStarCssClass = "filledRatingStar";
            dynamischeratingcontrol.EmptyStarCssClass = "emptyRatingStar";
    
            foreach (DomeinsCriteriums domeincontrol in domeincontrolenum)
            {
                foreach (CriteriumLijn criteriumcontrol in domeincontrol.Criterias)
                {
                    ScriptManager1.RegisterAsyncPostBackControl(dynamischeratingcontrol);
                    dynamischeratingcontrol.ID = criteriumcontrol.Criterium.CriteriumNaam;
                    dynamischeratingcontrol.MaxRating = Convert.ToInt32(criteriumcontrol.Criterium.Domein.DomeinGewicht);
                    criteriumcontrol.Rating = dynamischeratingcontrol;
                    criteriumcontrol.Rating.Changed += new AjaxControlToolkit.RatingEventHandler(rating_Changed);
                }
            }
        }
    }        
    

    }

  2. 处理每个评级控件的每个事件的事件处理程序

    //每个控件的事件处理程序 protected void rating_Changed(对象发送者,AjaxControlToolkit.RatingEventArgs e) { AjaxControlToolkit.Rating gefirederatingcontrol = (AjaxControlToolkit.Rating) 发送者; String ratingid = gefirederatingcontrol.ID;

    Evaluatieform mijnform = (Evaluatieform) Session["formulier"];
    IEnumerator<DomeinsCriteriums> domeincontrolenum = mijnform.controls.GetEnumerator();
    
    while (domeincontrolenum.MoveNext())
    {
        foreach (CriteriumLijn criteriumcontrol in domeincontrolenum.Current.Criterias)
        {
            if (criteriumcontrol.Criterium.CriteriumNaam == ratingid)
                criteriumcontrol.Score = gefirederatingcontrol.CurrentRating;
        }
    }
    Session["formulier"] = mijnform;
    

    }

  3. 加载页面时出错

无论如何,我在 Visual Studio 中没有遇到任何错误,但是当我启动我的网站并导航到页面时,即使在打开页面时他甚至无法执行代码(评级控件所在的表)要添加的内容是不可见的,所以让我在每次页面加载时读取控件的布尔值都是错误的),他给了我这些编译错误:

  • 编译错误

描述:在编译服务此请求所需的资源期间发生错误。请查看以下特定错误详细信息并适当修改您的源代码。

Compiler Error Message: CS0029: Cannot implicitly convert type
  'System.Collections.Generic.List<DomeinsCriteriums>.Enumerator' to 
  'System.Collections.Generic.IEnumerator<DomeinsCriteriums>'

来源错误:

Line 334:
Line 335:        Evaluatieform mijnform = (Evaluatieform) Session["formulier"];
Line 336:        IEnumerator<DomeinsCriteriums> domeincontrolenum = mijnform.controls.GetEnumerator();
Line 337:
Line 338:        while (domeincontrolenum.MoveNext())

Source File: e:\Website Werkend (07-04-11)\Evaluatie.aspx.cs    Line: 336 

如果我不评论它,我会在第 58 行得到同样的错误。

有人对此有任何想法吗?我一无所知。

【问题讨论】:

    标签: c# asp.net compiler-errors ajaxcontroltoolkit


    【解决方案1】:

    看起来您正在调用的 ControlCollection.GetEnumerator() 返回一个非泛型 IEnumerator

    试试

    Evaluatieform mijnform = (Evaluatieform) Session["formulier"];
    IEnumerator domeincontrolenum = mijnform.controls.GetEnumerator();
    
    while (domeincontrolenum.MoveNext())
    {
        DomeinsCriteriums current = (DomeinsCriteriums)domeincontrolenum.Current;
        foreach (CriteriumLijn criteriumcontrol in current.Criterias)
        {
            if (criteriumcontrol.Criterium.CriteriumNaam == ratingid)
                criteriumcontrol.Score = gefirederatingcontrol.CurrentRating;
        }
    }
    

    【讨论】:

      【解决方案2】:

      更改此行会发生什么

      IEnumerator<DomeinsCriteriums> domeincontrolenum = mijnform.controls.GetEnumerator();
      

      List<DomeinsCriteriums>.Enumerator domeincontrolenum = mijnform.controls.GetEnumerator();
      

      var domeincontrolenum = mijnform.controls.GetEnumerator();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-04-24
        • 1970-01-01
        • 2013-02-25
        • 1970-01-01
        • 2014-01-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多