在aspx文件中使用<%=getter%>的Asp.net中,Controls集合无法修改,因为该控件包含代码块。

4 浏览
0 Comments

在aspx文件中使用<%=getter%>的Asp.net中,Controls集合无法修改,因为该控件包含代码块。

我有一个aspx和aspx.cs文件,在aspx文件中我使用了JavaScript函数,在JavaScript代码中我使用了aspx.cs文件中定义的getter(<%=getSize%>)方法,但是页面返回了一个错误信息:“由于控件包含代码块,所以无法修改控件集合”。为什么会出现这个错误?

aspx文件:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="uploadFile.aspx.cs" Inherits="UploadControl_CustomProgressPanel" Title="Untitled Page" %>

Untitled Page

...

aspx.cs文件:

using System;

using System.Data;

using System.Configuration;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Web.UI.HtmlControls;

using System.IO;

public partial class UploadControl_CustomProgressPanel : System.Web.UI.Page

{

protected int size = 2;

protected int getSize{ get { return this.size; }}

protected void Page_Load(object sender, EventArgs e)

{

string UpPath;

UpPath = "C:\\";

if (! Directory.Exists(UpPath))

{

Directory.CreateDirectory("C:\\");

}

}

protected void Button1_Click(object sender, EventArgs e)

{

if(FileUpload1.HasFile)

{

try

{

string filePath = Request.PhysicalApplicationPath;

filePath += "classic/hub/csv/";

filePath += FileUpload1.FileName;

this.size = 50;

FileUpload1.SaveAs(filePath);

Label1.Text = "上传成功!";

}

catch(Exception ex)

{

//StatusLabel.Text = "Upload status: The file could not be uploaded. The following error occured: " + ex.Message;

}

}

}

}

0
0 Comments

在Asp.net中,如果在aspx文件中使用<%=getter%>,可能会出现"The Controls collection cannot be modified because the control contains code blocks"的错误。造成这个错误的原因是在页面加载时,<%=getter%>会将getter的值赋给size,而不会在每次访问时计算getter的值。如果getter是一个函数,那么需要考虑使用页面方法来调用它,而不是直接在aspx文件中调用。你可以参考这个例子:点击这里

根据之前的问题,似乎是一个重复的问题,你可以参考这个帖子:stackoverflow.com/questions/4995274/…,尝试将有问题的代码放在<asp:placeholder runat="server">标签中进行包裹。这样可以解决这个错误。

0
0 Comments

在ASP.NET中,当在aspx文件中使用<%=getter%>时,可能会遇到“The Controls collection cannot be modified because the control contains code blocks”的问题。下面将介绍这个问题的原因以及解决方法。

首先,需要注意到这个问题的出现与代码块的使用有关。在ASP.NET中,代码块是一种特殊的代码结构,用于在aspx文件中嵌入动态内容。代码块可以包含服务器端代码、表达式、函数和变量等。当代码块被解析和执行时,它会生成相应的HTML代码,并将其发送到客户端浏览器进行显示。

然而,在使用<%=getter%>语法时,代码块被嵌入到aspx文件中的控件集合中。控件集合是ASP.NET页面上所有控件的容器。当控件集合被修改时,会触发ASP.NET的生命周期事件,并在页面呈现之前重新生成和更新控件集合。然而,使用<%=getter%>语法的代码块会导致控件集合被修改,从而触发上述异常。

解决这个问题的方法是将代码块移出控件集合。一种常见的做法是将代码块放在页面的其他位置,而不是直接嵌入到控件集合中。例如,可以将代码块放在页面的<head>标签之外。这样,代码块就不会干扰控件集合的修改,从而避免了异常的发生。

下面是一个示例代码,展示了如何将代码块移出控件集合:




    ASP.NET Page


    
<%-- 此处是控件集合 --%>
<%-- 这里是代码块 --%> <% var getter = "Hello, World!"; %>

通过将代码块放在控件集合之外,可以避免修改控件集合而导致的异常。这样,就能够顺利地使用<%=getter%>语法,将动态内容显示在页面上。

总结一下,使用<%=getter%>语法时,需要注意避免将代码块嵌入到控件集合中,以免触发“The Controls collection cannot be modified because the control contains code blocks”的异常。解决方法是将代码块移出控件集合,将其放在其他位置。这样,就能够正常使用<%=getter%>语法,并显示动态内容。

0