c # ASP.NET Контролирует коллекции кода блок глупости - PullRequest
1 голос
/ 08 октября 2010

Что может вызвать:

The Controls collection cannot be modified because the control contains code blocks (i.e. <% ... %>).

Я спрашиваю, потому что код не содержит блоков кода. В любом месте. Ни на одной странице всего сайта нет ни одного блока <% =%>. Все, что у меня есть, это директивы <% @%>.

Edit:

Ниже приведен код, вызывающий ошибку.

/// <summary>
/// Adds javascript variables to a page so that ASP control ID are accessable via Javascript. The
/// variable names are ASP_ControlID.
/// </summary>
/// <param name="page">The Page to add the javascript to</param>
/// <param name="ctls">The controls to make accessable</param>
public static void addJavascriptIDs(Page page, params Control[] ctls)
{
    Literal litJS = new Literal();
    litJS.Text = getJavascriptIDs(ctls);
    page.Form.Controls.Add(litJS);  ////////// <-- Error Here
}

/// <summary>
/// Returns a string containing the javascript to allow javascript to access
/// ASP controls.
/// </summary>
/// <param name="ctls">The HTML and javascript to create the javascript variables</param>
/// <returns>The script</returns>
public static string getJavascriptIDs(params Control[] ctls)
{
    string js = "\n<script type=\"text/javascript\">\n";
    foreach (Control ctl in ctls)
        js += "\tvar ASP_" + ctl.ID + " = '" + ctl.ClientID + "';\n";
    js += "</script>\n\n";

    return js;
}

Это функция Page_Load:

protected void Page_Load(object sender, EventArgs e)
{
    formHowHear.Attributes.Add("onChange", "displayOther(this);");
    LoadValues();
    if (!IsPostBack)
    {
        LoadDefaults();
        BindValidation();
    }
    else
    {
        Submitted();
    }
    CMSUtil.addJavascriptIDs(this, formEmail1, formEmail2, formUsername);
    CMSUtil.addJavascriptIncludes(Page,
        ResolveUrl("~/js/jquery-1.4.2.min.js"),
        ResolveUrl("~/admin/js/TVCMS.js")
        );
}

1 Ответ

2 голосов
/ 08 октября 2010

возможно, у вас есть какой-то пользовательский элемент управления, содержащий <% %>, например календарь ajaxcontroltoolkit. Однажды у меня была та же проблема, и единственным решением было убрать этот контроль.

попробуйте удалить / комментировать фрагменты кода, чтобы вы могли точно определить причину проблемы.

РЕДАКТИРОВАТЬ: не уверен, если это решит проблему, но это правильный способ ввести JS:

public static void addJavascriptIDs(Page page, params Control[] ctls)
{
    string js = "";
    foreach (Control ctl in ctls)
        js += string.Format("var ASP_{0} = '{1}';", ctl.ID, ctl.ClientID);
    page.ClientScript.RegisterClientScriptBlock(typeof(object), "IDs", js, true)
    /* http://msdn.microsoft.com/en-us/library/bahh2fef.aspx */
}
public static void addJavascriptIncludes(Page page, params string[] scripts)
{
    foreach (string script in scripts)
        page.ClientScript.RegisterClientScriptInclude(typeof(object), script, page.ResolveUrl(script));
    /* http://msdn.microsoft.com/en-us/library/kx145dw2.aspx */
}
...