我正在使用ajax控件包动态地将ratingcontrols添加到预定义表的某个列中,该控件的最大值取决于他之前的列。
无论如何,当使用动态控件时,我已经知道你应该每次在页面加载时重新添加它们,所以我添加了一个Session变量,让我 - 当第一次没有加载页面时这个boolean为true - 添加这些评级控件及其在此页面上由事件处理程序处理的事件(已更改)。
这是处理评级事件的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);
}
}
}
}
}
处理每个评级控件的每个事件的事件处理程序
//每个控件的事件处理程序 protected void rating_Changed(object sender,AjaxControlToolkit.RatingEventArgs e) { AjaxControlToolkit.Rating gefirederatingcontrol =(AjaxControlToolkit.Rating)sender; 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中没有出现任何错误,但是当我启动我的网站并导航到页面时,即使他甚至无法在页面打开时执行代码(评级控制的表格是要添加的是不可见的,所以允许我读取每个页面加载的控件的布尔值为false),他给了我这些编译错误:
描述:编译服务此请求所需的资源时发生错误。请查看以下特定错误详细信息并相应地修改源代码。
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行得到同样的错误。
有人对此有任何想法吗?我一无所知。
答案 0 :(得分:0)
看起来您正在调用的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;
}
}
答案 1 :(得分:0)
更改此行时会发生什么
IEnumerator<DomeinsCriteriums> domeincontrolenum = mijnform.controls.GetEnumerator();
要
List<DomeinsCriteriums>.Enumerator domeincontrolenum = mijnform.controls.GetEnumerator();
或
var domeincontrolenum = mijnform.controls.GetEnumerator();