코드 숨김에서 컨트롤 ID에 액세스할 수 없습니다.
-
19-09-2019 - |
문제
내 aspx 페이지에 다음 코드가 있습니다.
<asp:Button runat="server" ID="myButton" Text="hello" />
내 코드 뒤에는 다음이 있습니다.
protected void Page_Load(object sender, EventArgs e)
{
myButton.Text = "bye";
}
어떤 이유로 Intellisense는 뒤에 있는 코드에서 "myButton" ID를 선택하지만 컴파일할 때 다음과 같이 표시됩니다.
인식하지 못하기 때문에 빌드할 수 없습니다!
내 페이지는 마스터 페이지를 사용하는 기본 aspx 페이지이며, 버튼은 콘텐츠 컨트롤 내에 있고 모두 서버에서 올바르게 실행되도록 설정되어 있으며, 이 버튼 해결 문제를 제외하고는 페이지가 제대로 실행되고 표시됩니다!
어떤 아이디어가 있나요?
해결책
디자이너 파일 (pagename.designer.cs)이 약간 엉망이 된 것 같습니다. 페이지에서 버튼을 삭제하고 다시 추가 해보겠습니다.
다른 팁
버튼이 리피터처럼 이름 지정 컨테이너 안에 있으면 그렇게 사용할 수 없습니다. 대신, 당신은 다음과 같은 일을해야합니다.
Button myButton = (Button)Container.FindControl("myButton");
myButton.Text = "bye";
나는 같은 문제를 겪었습니다. 먼저 Designer.cs 파일에 무엇이 잘못되었는지 알아 내려고했습니다. 그러나 내 웹 폼 마크 업에 대해 기본 웹 형태에서 복사/붙여 넣기를 사용하고 있음을 깨달았습니다. 따라서 문제는 Protector와 마찬가지로 @Page의 상속 속성을 확인하십시오.
<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true"
CodeBehind="Default.aspx.cs" Inherits="InputValidation._Default" %>
이 경우에 대한 간단한 솔루션을 찾았습니다.
디자이너 파일을 열고 UI 컨트롤에 해당하는 줄을 추가하십시오.
protected global::System.Web.UI.WebControls.Button myButton;
어디에 Mybutton ~이다 Id
당신의 통제의.
나는 문제에 직면했고 그것을 알아 차렸다 Designer.cs
내 프로젝트에서 파일이 제외되었습니다.
프로젝트에 다시 포함 시키십시오.
행운을 빕니다
문제가 해결되었다는 것을 알고 있지만, 비슷한 문제가 있었을 때, 웹 aplication을 c#에서 vb로 변환했을 때 - 네임 스페이스 x / end namespace를 추가하여 이것을 해결했습니다.
오늘도 같은 문제가 있었고 제 경우 해결책은 다음과 같습니다.
- 이동 :
C:\Users\lenovo\AppData\Local\Temp\Temporary ASP.NET Files\
- 삭제
Temporary ASP.NET Files
폴더.
나는 이 문제에 몇 번 직면했습니다.때로는 디자이너의 클래스 이름과 코드 숨김이 일치하지 않는 경우가 있습니다.다른 경우에는 네임스페이스가 일치하지 않는 경우도 있습니다.다른 경우에는 디자이너 페이지에서 멤버 변수가 생성되지 않습니다.
mdresser가 언급했듯이 디자이너 파일을 아주 잘 재생성하면 문제를 해결할 수 있습니다.먼저 aspx 페이지를 저장했는지 확인하세요.
실수로 동일한 (부분) 클래스를 상속하거나 정의하려고 시도하는 파일이 없는지 확인하십시오. 이 파일은 오류가 실제로 나타난 위치와 완전히 관련이 없을 수 있습니다!
오랜 시간이 걸렸습니다. Buuuut 나는 오늘이 같은 문제에 직면하고 있었기 때문에 너무 늦지 않은 것 같습니다. 나를 위해 그것은 일어났다 TextBox
이름이 아닌 형태 안에있었습니다. 그런 다음 ID를 양식으로 설정하고 에코를 사용할 수 있습니다. TextBox
이와 같이: idForm.idTextBox.ToString()
. 나는 그것이 똑같이 일어날 것 같아 button
.
문제는 CodeFile에 Page Directive Points에 동일한 CodeHind 파일이있는 여러 ASPX 파일이있을 수 있다는 것입니다. 동일한 컨트롤이 동일한 코드 뒤에 연결된 모든 ASPX 파일에 존재하여 컴파일 오류를 던지기를 기대합니다.
세 파일 모두에서 네임 스페이스를 확인하십시오. 때로는 Designer.cs 파일의 네임 스페이스 이름과 다른 두 파일 사이에 불일치가 있습니다. 세 파일 모두에서 그 이름 공간 이름 일치를 확인하십시오.
페이지 태그 아래에서 상속 속성을 변경하십시오
<% Page inherit = "Project_Name.otherform"
변경하십시오
<% Page inherit = "Project_Name.YourForm"
그리고 당신은 form2.aspx.desginer.cs에 표시됩니다. 클래스 이름도 변경되고 수정됩니다.
설명하겠습니다 : 2 개의 웹 양식 test1.aspx 및 test2.aspx가 있다고 가정 해 봅시다. test1.aspx에서 test2.aspx로 일부 코드 조각을 복사했습니다. test2.aspx 파일은 <% page tag를 사용합니다.
<% Page inherit = "Project_Name.test1"
그것은 다음과 같습니다.
<% Page inherit = "Project_Name.test2"
이에 따라 Test2.aspx.designer.cs 클래스 이름은 시스템 생성 파일이므로 Test1.aspx.designer.cs와 동일하게 자동으로 변경되며 제어 ID를 사용할 수 없습니다.
상속 속성을 수정 한 후 Test2.aspx.designer.cs를 저장하고 열면 클래스 이름도 변경되도록 확인할 수 있습니다. 그것은 다음과 같습니다.
public partial class test1
{
...
으로 바뀌었다
public partial class test2
{
...
나중에 감사합니다;)