Rock_Dead Ответов: 4

ГАДЮКА.Чистая ошибка как ссылка на объект не установлена на экземпляр объекта


Привет,

Я получаю ошибку "ССЫЛКА на объект не установлена на экземпляр объекта", когда я запускаю этот фрагмент кода, дайте мне знать, что можно сделать, чтобы избавиться от этого.


string cntry = Session["ddlCountry"].ToString();

            if (cntry == "US")
            {
                lnkUrl.Text = string.Empty;
                if (lnkUrl == null ||  lnkUrl.Text.Length == 0)
                {
                    lnkUrl.Text = "http://www.google.com";
                }

Richard MacCutchan

Убедитесь, что каждая ссылка действительно указывает на что-то. Также в будущем, пожалуйста, покажите точную строку кода, которая дает ошибку.

4 Ответов

Рейтинг:
2

C@dER@j

Это в основном связано с объектом сеанса.
Это происходит потому, что сеанс не имеет ценности, я думаю.
Поэтому сделайте одну вещь, прежде чем обращаться к значению сеанса, проверьте, существует ли сеанс или нет. Если существует, то только назначьте это значение сеанса переменной.


Пример:
Поместите этот код в метод page_Load.Сначала прокомментируйте инициализацию сеанса, а затем проверьте un comment и проверьте это. Надеюсь, вы получите ответ на то, что ищете.


Session["ddlCountry"] = "US";

if (Session["ddlCountry"]!=null)
{
    string cntry = Session["ddlCountry"].ToString();

    if (cntry == "US")
    {
        lnkUrl.Text = string.Empty;
        if (lnkUrl == null || lnkUrl.Text.Length == 0)
        {
            lnkUrl.Text = "http://www.google.com";
        }
    }
}
else
{
    lnkUrl.Text="Value not present in Session.";
}



Желаю удачи.


OriginalGriff

Причины, по которым я голосую за одного: нет, это не так.
Попробовать это:
строка s = null;
если (s = = " US")
{
}
Он вообще не будет выдавать исключение - так что не имеет значения, если возвращаемое значение сеанса равно null, это не вызовет его проблем

C@dER@j

Ваша точка зрения верна, код, который вы написали, не будет проходить через исключение ant. Но для того, чтобы преобразовать нулевое значение в строку, используя
"string cntry = Session ["ddlCountry"].Метод toString();"
этот код вызывает исключение. Если вы не получите мой комментарий, то проверьте разницу между функциями .ToString () и Convert.ToString ("") тогда вы узнаете.

Dmytro Bogachev

Позвольте мне не согласиться с вами. Мой ответ аналогичен в сессионной части. И нулевое значение объекта сеанса может быть одной из причин возникновения такой проблемы. Вы можете сравнить с null, как в вашем случае, но вот что происходит в исходном коде:
string s = null; / / Session ["whatever"] is null
s. ToString (); / / и исключение

C@dER@j

Вот что я сказал.если у вас есть null и вы собираетесь преобразовать его в string с помощью .tostring (), то возникнет исключение. Так что если вы проверяете это нулевое значение, если его там нет, то только вы конвертируете с помощью .Метод toString()..

OriginalGriff

Игнорируйте вышесказанное - я готовил кофе и понял, что пропустил "ToString" на сеансе доступа - что делает вас правым, а меня-неправым! Извините...: O
Я исправил голосование до 5 и могу винить только старшеклассника в сочетании с недостатком кофеина. И, конечно, природная глупость.

C@dER@j

Ха-ха-ха-ха сек...Так держать:-)

Рейтинг:
2

OriginalGriff

Почему вы используете свойство объекта, а затем позже проверяете его на null?

lnkUrl.Text = string.Empty;
 if (lnkUrl == null ||  lnkUrl.Text.Length == 0)
Второй текст в любом случае совершенно бесполезен, потому что предыдущая строка косвенно устанавливает длину в ноль в любом случае!
Поменяй его местами:
if (lnkUrl != null)
   {
   lnkurl.Text = "http://www.google.com";
   }
И не пытайтесь задавать свойства нулевых значений!


Rock_Dead

Я хочу установить текст LinkURL следующим образом http://www.google.com"; как вы думаете, это решит задачу?

OriginalGriff

Вы можете установить значение его текстового свойства только в том случае, если lnkURL не является нулевым, то есть если он был установлен на экземпляр объекта где - то.
Если код выдает исключение null reference при попытке доступа к свойству Text, то вам нужно посмотреть на остальную часть вашего кода, чтобы выяснить, почему это значение еще не было установлено. Я не могу, потому что вы не показываете этот код в своем фрагменте.
Итак, используйте отладчик, чтобы "проследить" свой код и выяснить, как вы туда попали!

Rock_Dead

Я попытался с помощью этого кода, если (lnkUrl != нуль)
{
lnkurl.Текст = "http://www.google.com";
}
но все равно выдает ту же ошибку

Rock_Dead

Мой URL-адрес ссылки теперь равен нулю, и я хочу заполнить его каким-то текстом

OriginalGriff

Игнорируйте меня - это совсем не так - это ваш сеанс, как уже было сказано - я пропустил ToString на вашем сеансовом доступе, который будет выдавать исключение, если значение сеанса не было установлено - так что посмотрите, почему это null (и проверьте его, прежде чем пытаться что-либо с ним сделать!)

Rock_Dead

Мое значение сеанса не приходит как null, оно содержит значение, как и ожидалось

OriginalGriff

Как вы проверили?

Rock_Dead

В самом коде во время отладки я вижу там значение

OriginalGriff

И ваша ссылка равна нулю? Итак, вам нужно выяснить, почему переменная link равна null - где она устанавливается?

Вы не можете установить ссылку, пока не установите экземпляр элемента управления link в переменную link!

Рейтинг:
2

Dmytro Bogachev

Проверьте, имеет ли ваш сеанс["ddlCountry"] значение, прежде чем работать с ним. Проверьте, установлен ли ваш lnkUrl в допустимое управление.
Так что код может быть таким:

if(Session["ddlCountry"] != null)
{
    var cntry = Session["ddlCountry"].ToString();
    if (cntry.Equals("US"))
    {
        //You cannot use this control, if lnkUrl is null
        //Since you're  setting lngUrl.Text = string.Empty, it will have 
        //Text.Length == 0  in all cases; so consider changing your logic. 
        //Probably like in code below.
        if(lnkUrl != null)
        {
            if(lnkUrl.Text.Length == 0)
            {
                lnkUrl.Text = "http://www.google.com";
            }
        }
    }
}


Rock_Dead

получение той же ошибки даже с этим кодом

Dmytro Bogachev

Вы пробовали отлаживать? Какова точная линия вашего исключения? В приведенном выше коде есть 2 возможные точки отказа, Session ["ddlCountry"].ToString () - если ToString () по какой-то причине возвращает null (и я не вижу причин для такого поведения) и если lnkUrl.Текст нулевой - это тоже странно.

Rock_Dead

я отладил это же исключение в строке lnkUrl.Текст = "http://www.google.com";
и также я меняю эту строку, т. е. если(lnkUrl != нуль), если(lnkUrl == нуль) как lnkUrl приходит как null

Dmytro Bogachev

Так что ваша проблема не в вышеприведенном коде, это правильно. Покажите, пожалуйста, код, где вы получаете lnkUrl. В основном речь идет об этом контроле.

Rock_Dead

Я не установил текстовое значение в этом Linkurl. это код

<asp: LinkButton ID=" lnkUrl "runat= "server" CssClass= "linkurl" ForeColor= " #006600"
Шрифт-жирный="истинный" шрифт-имен="Вердана" размер шрифта="8рт"&ГТ;

Dmytro Bogachev

Одна из возможных причин - этот элемент управления еще не инициализирован. Что такое событие (событие страницы), в котором у вас есть код, который вызывает исключение?

Rock_Dead

При Загрузке Страницы

Dmytro Bogachev

В вашем вопросе мы кое-что упускаем. Элемент управления должен быть инициализирован уже при загрузке страницы. Может быть, вы используете пользовательские элементы управления, и ваша кнопка ссылки находится в пользовательском элементе управления, может быть, есть какая-то проблема с кэшем, если вы его используете, но в любом случае речь идет не о коде, который вы разместили здесь. Я предлагаю вам открыть новый вопрос с кратким описанием вашей текущей структуры страницы, который спросит, почему lnkUrl равен null во время события Page_Load.

Рейтинг:
1

Tadit Dash (ତଡିତ୍ କୁମାର ଦାଶ)

Перед чтением Session, всегда проверяйте наличие null.

if(Session["ddlCountry"] != null)
{
    string cntry = Session["ddlCountry"].ToString();
}

Если Session ddlCountry значение отсутствует, оно вызовет "исключение ссылки на объект".


N.Manjula

Я скопировал код но я получаю ошибку недопустимый ключ MAshape даже я вставил ключ тестирования

Tadit Dash (ତଡିତ୍ କୁମାର ଦାଶ)

Я не получаю. Что ты пытаешься сделать?