转发器可以自动使用不同的clientIDMode然后在web.config中设置什么? (的ClientIDMode = “静态”)

时间:2012-04-18 19:49:28

标签: .net c#-4.0 .net-4.0 clientid asprepeater

我想在web.config中使用clientIDMode =“Static”,因为它非常适合前端开发。

但是,我希望我的中继器,数据网格和数据列表默认为clientIDMode =“Predictable”,因此页面上没有重复的ID。我不想在每次创建转发器时都设置它,因为它是额外的代码,如果我忘记了我不会立即看到任何问题,所以我可能继续没有意识到我犯了错误。

非常感谢有关此问题的任何帮助。

1 个答案:

答案 0 :(得分:1)

不,我担心这样的事情不存在。

如果这对您非常重要,您可以在您的主人或网页Page_Init中实施以下内容:

protected void Page_Init(object sender, EventArgs e)
{
    var types = new Type[] { 
        typeof(Repeater), typeof(DataGrid), typeof(GridView), 
        typeof(DataList), typeof(ListView), typeof(FormView) 
    };
    var allControls = new List<Control>();
    FindChildControlsRecursive(Page, types, allControls);
    foreach (var ctrl in allControls)
    {
        ctrl.ClientIDMode = ClientIDMode.Predictable;
    }
}

public void FindChildControlsRecursive(Control control, IList<Type> types, IList<Control> result)
{
    foreach (Control childControl in control.Controls)
    {
        var controlType = childControl.GetType();
        if (typeof(Control).IsAssignableFrom(controlType) && types.Contains(controlType))
        {
            result.Add((Control)childControl);
        }
        else
        {
            FindChildControlsRecursive(childControl, types, result);
        }
    }
}

但在我看来,这对提醒来说太过分了。