Не удается преобразовать HiddenField в Int32

У меня проблема с преобразованием типа данных, которую я просто могу понять

 HiddenField hfFriendId = item.FindControl("hfFriendId") as HiddenField;
 Int32 FriendId = Convert.ToInt32(hfFriendId.Value);

Мне нужно использовать FriendId как и int32 в следующем

UserInfo TargetUser = UserController.GetUserById(PortalSettings.PortalId, FriendId);

поскольку ожидается, что оба аргумента будут int32. Когда я отлаживаю, этот «TargetUser» имеет значение null.

В чем может быть проблема?


person Mark Hollas    schedule 04.10.2012    source источник
comment
Есть ли информация о пользователе для переданных параметров? Каково значение FriendId при передаче аргумента?   -  person V4Vendetta    schedule 04.10.2012
comment
проверьте, является ли значение hfFriendId.Value пустым (или нулевым) или нет. Int32 FriendId=0; if(hfFriendId.Value!=""){ FriendId = Convert.ToInt32(hfFriendId.Value); else {FriendId =0;}}   -  person user1509    schedule 04.10.2012
comment
В том-то и дело, что FriendId заполняется значением   -  person Mark Hollas    schedule 04.10.2012
comment
Правильно ли указано название поля (hfFriendId)?   -  person Tim    schedule 04.10.2012
comment
наблюдая за hfFriendId в отладке, я вижу, что это имеет значение. также, когда я смотрю на UserInfo TargetUser = UserController.GetUserById(PortalSettings.PortalId, FriendId); Я вижу там, что FriendId имеет значение, но в eind TargetUser остается нулевым   -  person Mark Hollas    schedule 04.10.2012
comment
@MarkHollas Если у него действительное значение, опубликуйте подробности для метода GetUserById, возможно, там что-то не так.   -  person V4Vendetta    schedule 04.10.2012
comment
Вот что-то странное. Если я сделаю это Int32 FriendId = 100; TargetUser заполняется   -  person Mark Hollas    schedule 04.10.2012


Ответы (1)


Если вы не уверены в значении, доступном в скрытом поле, вместо использования

Int32 FriendId = Convert.ToInt32(hfFriendId.Value);

Пытаться

int FriendId = int.Parse(hfFriendId.Value); // will throw exception if parse fails

или лучше

int FriendId ;
if(int.TryParse(hfFriendId.Value, out FriendId))
     //get userinfo

Также это может быть проблема с вашим методом UserController.GetUserById, если Convert получает проанализированное значение и не возвращает ноль.

person V4Vendetta    schedule 04.10.2012
comment
Я использую скрытое поле в шаблоне элемента asp: listView для передачи значения обратно в код позади. HiddenField по своей природе является строкой. Интересно, есть ли аналогичный способ передать значение обратно как int? - person Mark Hollas; 04.10.2012
comment
То, что вы предложили, является правильным ответом на мой вопрос. Однако выпуск был произведен самостоятельно. объекту UserInfo нужен не только тип данных int, но и действительный идентификатор пользователя! Каким-то образом мои тестовые данные были элементом, не являющимся действительным идентификатором пользователя. - person Mark Hollas; 04.10.2012