Darwin Ahmed Ответов: 2

Как решить сообщение об ошибке компилятора: CS1061:


МОЯ ПРОБЛЕМА
Server Error in '/' Application.
Compilation Error
Description: An error occurred during the compilation of a resource required to service this request. Please review the following specific error details and modify your source code appropriately. 

Compiler Error Message: CS1061: 'ASP.cusinfo_aspx' does not contain a definition for 'TextBoxCustomerNo_TextChanged' and no extension method 'TextBoxCustomerNo_TextChanged' accepting a first argument of type 'ASP.cusinfo_aspx' could be found (are you missing a using directive or an assembly reference?)

Source Error:
Line 56:                   Line 57:                       Line 58:                           <asp:textbox id="TextBoxCustomerNo" runat="server" ontextchanged="TextBoxCustomerNo_TextChanged" autopostback="True" cssclass="form-control" width="400px">
Line 59:                       Line 60:                        Source File: g:\pleskvhosts\mccis.online\httpdocs\Cusinfo.aspx    Line: 58


КОНЕЦ ПРОБЛЕМЫ------

ПОДРОБНОСТИ:

У меня есть страница с именем Cusinfo.aspx, с именем текстового поля TextBoxCustomerNo.Text
на моей локальной машине он работает идеально, но когда я загрузил его в свой домен, произошла ошибка.

Мой код позади на TextChanged:

protected void TextBoxCustomerNo_TextChanged(object sender, EventArgs e)
        {
            //Search for the Customer from database

            SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);
            con.Open();
            SqlCommand com = new SqlCommand("Select * from CustomerData Where CISno= '" + TextBoxCustomerNo.Text + "'", con);
            //SqlDataAdapter da = new SqlDataAdapter(com);
            SqlDataReader dr = com.ExecuteReader();



            if (dr.Read())
            {

                TxtFName.Text = (dr["Fname"].ToString());
                TxtLName.Text = (dr["Lname"].ToString());
                DropDwnCategory.SelectedItem.Text = (dr["Category"].ToString());
                DropDwnIDtype.SelectedItem.Text = (dr["IDtype"].ToString());
                TxtIDNo.Text = (dr["IDno"].ToString());
                //check if date is not null
                var dbirt = DateTime.Parse(dr["Dbirth"].ToString());
                if (dbirt != null)
                {
                    TxtDbirth.Text = dbirt.ToString("yyyy-MM-dd");
                }
                TxtPbirth.Text = (dr["Pbirth"].ToString());
                TxtAddress.Text = (dr["Addr"].ToString());
                TxtCity.Text = (dr["City"].ToString());
                DropDwnNationality.SelectedItem.Text = (dr["Nationality"].ToString());

                TxtContact.Text = (dr["Contactno"].ToString());
                DropDwnSrcIncome.SelectedItem.Text = (dr["Sourceoffund"].ToString());
                DropDwnWork.SelectedItem.Text = (dr["Natureofwork"].ToString());

                HyperLink1.NavigateUrl = "~/Tomerphoto.aspx?CISno=" + TextBoxCustomerNo.Text;

                DropDownSex.SelectedItem.Text = dr["Gender"].ToString();
                TxtEmail.Text = dr["Email"].ToString();

                TxtEmployer.Text = (dr["Employer"].ToString());
                TxtPostalCode.Text = dr["Postalcode"].ToString();
                DropDwnCountry.SelectedItem.Text = dr["Country"].ToString();


                var dex = DateTime.Parse(dr["Idexpireon"].ToString());

                ExpiryDate.Text = dex.ToString("dd/MM/yyyy");
                if (ExpiryDate.Text == "01/01/1900")

                {
                    CheckIDNoExpire.Checked = true;
                    ExpiryDate.Visible = false;
                }
                else
                {
                    ExpiryDate.Text = dex.ToString("yyyy-MM-dd");
                }
                txtComment.Text = dr["Comment"].ToString();

                con.Close();
                BtnUpdate.Visible = true;
                BtnSave.Visible = false;

            }
        }


Что я уже пробовал:

Я не знаю, что делать, потому что в моей локальной машине он работает, но когда я бегу в своем домене, происходит ошибка.

Maciej Los

Почему вы вызываете метод ToString (), когда работаете с переменной datetime?

Darwin Ahmed

ошибка находится на TextBoxCustomerNo, а не на переменной datetime.

Maciej Los

Я знаю. Но мне интересно, почему вы вызываете метод ToString (). Вам не кажется, что это излишне?

Darwin Ahmed

да, вы правы, я использовал это, потому что моя база данных, которую я использовал, уже имеет данные, но столбец DB-null, для вашей информации также, я новичок в asp.net, если у вас есть предложение, пожалуйста, разместите его здесь, и я действительно ценю это. :)

Maciej Los

Готово! Смотрите, решение № 2.

2 Ответов

Рейтинг:
2

Maciej Los

При первом взгляде я вижу несколько (незначительных) ошибок, которые нужно исправить:


  1. ваш код таков SQL-инъекция[^] уязвимый.
    Вы должны использовать параметризованные запросы и хранимые процедуры вместо "string-concatenated-commands"! Видеть: SQL-инъекция и как ее избежать – ASP.NET отладка[^]
  2. с помощью ToString() метод может быть причиной нескольких проблем, особенно если вы хотите работать с определенным типом объекта (например, datetime)! Видеть: Приведение и преобразование типов - руководство по программированию на C# | Microsoft Docs[^]
    Так, вместо:
    //#1
    TxtFName.Text = (dr["Fname"].ToString());
    //#2
    var dex = DateTime.Parse(dr["Idexpireon"].ToString());

    использовать
    //#1
    TxtFName.Text = (string)dr["Fname"];
    //#2
    if(DBNull.Value.Equals(dr["Idexpireon"]))
        dex = new DateTime(1900,1,1); //set default date
    else
        dex = (DateTime)dr["Idexpireon"]; //grab existing date
    ExpiryDate.Text = dex.ToString("yyyy-MM-dd");

    Для получения более подробной информации, пожалуйста, смотрите: Значение dbnull.Поле Значения (Система) | Microsoft Docs[^]
  3. я бы предложил использовать оператор using[^], потому что "Оператор using вызывает метод Dispose для объекта правильным образом, и (когда вы используете его, как показано ранее) он также приводит к тому, что сам объект выходит из области видимости, как только вызывается Dispose."
    using(SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString))
        using(SqlCommand com = new SqlCommand("theNameOfStoredProcedureHere", con))
        {
            con.Open();
            com.Parameters.Add(new SqlParameter("@CISno", SqlDbType.Int) {Direction=ParameterDirection.Input, Value=TextBoxCustomerNo.Text}) //add corresponding parameter
            using(SqlDataReader dr = com.ExecuteReader())
            {
                //your code here...
            }


Рейтинг:
19

dnxit

Я предполагаю, что ваши библиотеки DLL скомпилированной версии не обновляются в развернутом расположении

Попробуйте очистить & Rebulid и повторно развернуть

Вы также можете попробовать отладить развернутый код, подключив отладчик к процессу

Запустите веб-сайт в браузере, затем перейдите в меню отладки в Visual Studio и выберите команду прикрепить к процессу.
Он покажет диалоговое окно со списком процессов, поставит галочку Показать процессы от всех пользователей, а затем найдет w3wp.exe процесс в списке, теперь нажмите кнопку Прикрепить.

Присоединение к запущенным процессам с помощью отладчика - Visual Studio 2015 | Microsoft Docs[^]

Теперь, когда вы генерируете события и указываете их обработчики на разрыв на стороне сервера, отладчик останавливается на точках останова в Visual Studio.

Я бы посоветовал вам также прочитать эту статью
Построить решение и Перестроить решение и Меню правильное решение [^]


Darwin Ahmed

не могу определить местонахождение w3wp.exe сэр, что я выберу?

dnxit

Разместите свое приложение на локальном сервере IIS на вашем компьютере, затем запустите диспетчер IIS и нажмите кнопку Обновить в диалоговом окне прикрепить к процессу.

Вот статья, если вы не знаете, как разместить в локальном IIS
https://www.codeproject.com/Articles/667694/How-to-Host-a-Website-in-IIS7-2

Darwin Ahmed

сделано размещение в локальном IIS, что делать дальше?

dnxit

Еще одну вещь ты можешь попробовать сделать
охраняемых недействительными TextBoxCustomerNo_TextChanged(объект отправителя, EventArgs в электронной)
к
общественного недействительными TextBoxCustomerNo_TextChanged(объект отправителя, EventArgs в электронной)

Darwin Ahmed

я попробовал, но произошла та же ошибка.

dnxit

Также проверьте, правильно ли вы установили директиву Code behind page на своей странице aspx?

<%@ страница ... Язык="C#" И Отделенного Кода="??? .aspx-файл.КС" наследует="..." .../&ГТ;

Darwin Ahmed

В моем файле CusInfo.aspx его нет, но этот код-мой сайт.Мастер
&ЛТ;%@ мастер языка="в C#" AutoEventWireup значение="истинной" отделенного кода="сайт.мастер.КС" наследует="Money_Changer.SiteMaster" %>

dnxit

Там должен быть один такой, как в основном он связывает ваш aspx с вашим кодом позади, и именно так события также связываются.

&ЛТ;%@ страницы язык="в C#" AutoEventWireup значение="истинной" отделенного кода="ReportWebForm.aspx-файл.КС" наследует="отчет.ReportWebForm" %&ГТ;

dnxit

Прочтите также Эти две ссылки.

https://stackoverflow.com/questions/1198347/asp-net-cs1061-compilation-error-on-deployment

https://forums.asp.net/t/1503255.aspx?Compiler+ошибка+Сообщение+CS1061

Darwin Ahmed

спасибо, сэр, я нашел решение в вашей первой ссылке, Это О DLL в каталоге bin.

этот парень говорит: Возможно, у вас нет последней библиотеки DLL, развернутой из папки bin. Проверьте версии между вашим компьютером и сервером, чтобы убедиться, что они совпадают.

то, что я сделал, я просто загрузил все файлы из каталога bin на своем локальном компьютере на свой веб-сайт.

Еще раз благодарю вас, сэр ДНКСИТ .

dnxit

Это я предположил в самом первом ответе

Я предполагаю, что ваши библиотеки DLL скомпилированной версии не обновляются в развернутом расположении.......


но в любом случае я рад, что ваш вопрос решен.