Я проверил миллион других сообщений для той же самой ошибки здесь, но не смог найти ничего, что помогает.nullable объект должен иметь значение
У меня есть модель, как это:
public class User
{
public int UserId { get; set; }
public string UserName { get; set; }
public int? CommunityId { get; set; }
public string Email { get; set; }
public Int64? Phone { get; set; }
public AlertMode AlertMode { get; set; }
public string B64EncodedImage { get; set; }
}
Когда я получаю пользователя из базы данных, назначение выглядит следующим образом:
User user = new User()
{
UserId = Convert.ToInt32(reader["UserId"]),
UserName = Convert.ToString(reader["UserName"]),
CommunityId = reader["CommunityId"] == DBNull.Value
? (int?)null : Convert.ToInt32(reader["CommunityId"]),
Phone = reader["Phone"] == DBNull.Value
? (Int64?)null : Convert.ToInt64(reader["Phone"]),
AlertMode = (AlertMode)Int32.Parse(reader["AlertMode"].ToString()),
Email = Convert.ToString(reader["Email"]),
B64EncodedImage = Convert.ToString(reader["B64EncodedImage"])
};
Когда я называю этот код:
@((BusinessLogic.GetUserByUserId(WebSecurity.CurrentUserId)).CommunityId.HasValue
? "COMMUNITYID"
: "Not set!"
)
Я получаю эту ошибку:
Nullable object must have a value.
На этой линии:
@((BusinessLogic.GetUserByUserId(WebSecurity.CurrentUserId)).CommunityId.HasValue
Любые идеи, почему?
=============================================================================================================================================== ======================== EDIT:
Я изменил код, чтобы вернуть пользователя к просмотру в качестве модели:
public ActionResult Manage()
{
User user = BusinessLogic.GetUserByUserId(WebSecurity.CurrentUserId);
return View(user);
}
Пошаговое модель заполняется, но CommunityId равно нулю (что должно быть хорошо)
@(Model.CommunityId.HasValue
? "COMMUNITYID"
: "Not set!"
)
Теперь я получаю:
Cannot perform runtime binding on a null reference
Это объясняет, почему я не смог воссоздать исключение :). Вы должны исключить этот ответ. –