添加动态评级控制时出现奇怪的编译问题
本文关键字:编译 问题 动态 级控 控制 添加 | 更新日期: 2023-09-27 17:50:28
我正在使用ajax controlkit动态地向预定义表的某个列添加评级控件,该控件的maxrating取决于它前面的列。
无论如何,当使用动态控件时,我已经了解到你应该每次在页面加载时重新添加它们,所以我添加了一个Session变量,让我-当页面第一次没有被加载并且这个布尔值为真-添加这些评级控件及其事件(更改)由eventandler处理在这个页面上。
这是处理评级事件的2块代码&&动态添加到表中的列:
-
事件
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); } } } }
}
-
处理每个评级控件的每个事件的事件处理程序
//每个控件的事件处理程序(对象发送者,AjaxControlToolkit。RatingEventArgs e){AjaxControlToolkit。评级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;
}
-
加载页面错误
无论如何,我在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行也会出现同样的错误。
有人对此有什么想法吗?我笨。
看起来您正在调用的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;
}
}
改变这一行会发生什么
IEnumerator<DomeinsCriteriums> domeincontrolenum = mijnform.controls.GetEnumerator();
List<DomeinsCriteriums>.Enumerator domeincontrolenum = mijnform.controls.GetEnumerator();
或
var domeincontrolenum = mijnform.controls.GetEnumerator();