#c# #asp.net
#c# #asp.net
Вопрос:
У меня есть несколько строк кода, подобных этому,
public void rt_changed(object sender, AjaxControlToolkit.RatingEventArgs e)
{
//Label l = sender as Label;
foreach (DataListItem li in datalist.Items)
{
Label l = li.FindControl("nl") as Label;
}
Label3.Text = l.ToString(); // l values is not getting
}
Здесь переменная l равна нулю. Я знаю, что это происходит, потому что объявление l было сделано внутри области видимости foreach . Я не знаю, как вызвать переменную со значением в глобальном масштабе.
Ответ №1:
Объявите переменную во внешней области видимости:
public void rt_changed(object sender, AjaxControlToolkit.RatingEventArgs e)
{
Label l = null;
foreach (DataListItem li in datalist.Items)
{
l = li.FindControl("nl") as Label;
}
Label3.Text = (l == null ? string.Empty : l.Text);
}
Также обязательно проверьте, не является ли переменная null перед ее использованием (чтобы избежать исключения нулевого указателя); в примере я сделал это, используя условный оператор.
Совет 1: назовите свои переменные более осмысленным именем (‘l’ мало что говорит).
Совет 2: используйте Text
свойство для получения текста метки вместо ToString()
Комментарии:
1. Все еще получаю то же самое. System.Web.UI.WebControls. Метка передается вместо значения метки.
2. Используйте свойство Text вместо toString()
Ответ №2:
Вам просто нужно переместить объявление l
переменной за пределы цикла, чтобы сделать ее доступной. Вы можете объявить (указать, что это такое) в другом месте, чем там, где вы присваиваете ей значение.
public void rt_changed(object sender, AjaxControlToolkit.RatingEventArgs e)
{
// Declare l, also give it a default value, in the case that datalist is empty.
Label l = null;
foreach (DataListItem li in datalist.Items)
{
l = li.FindControl("nl") as Label;
}
Label3.Text = l.ToString(); // l values is not getting
}
Пожалуйста, обратите внимание, что l
это будет присвоено только последнему значению в datalist
коллекции, что, вероятно, не совсем то, что вы хотите.
Комментарии:
1. Но в этом случае, могу ли я получить значение l в label3 ?
2. Да, вы будете. Ваша переменная будет доступна в любом месте обработчика событий.
3. Здесь я получаю System.Web.UI.WebControls. Метка вместо label3.
4. @Anders Abel. Вы правы, как вы сказали, я получаю только последнее значение в списке данных. Как я могу изменить свой код, чтобы получить по своему желанию?
5. @gkrishy Это еще один вопрос, пожалуйста, опубликуйте его как новый. Комментарии к Stack Overflow не очень подходят для последующих вопросов.
Ответ №3:
Это просто,
public void rt_changed(object sender, AjaxControlToolkit.RatingEventArgs e)
{
//Label l = sender as Label;
foreach (DataListItem li in datalist.Items)
{
Label3.Text = (li.FindControl("nl") as Label).Text;
}
}
Комментарии:
1. Я не хочу такого. Потому что мне нужно вызвать значение моей метки в следующих строках в этой области. Согласно вашему ответу, я не получу значения меток за пределами области видимости.
2. Несмотря на то, что Label3 является элементом управления. Вы можете получить доступ к Label3 где угодно на этой странице, верно?