[英]In MVC how can you retrieve data from a model that is stored as a object in its super model?
[英]How to Retrieve Encoded Data from DB in MVC Model and Decode it for display
我正在使用ASP.NET MVC C#构建Web应用程序。 我正在使用函数对数据进行编码:
public string Encode(string encodeMe)
{
byte[] encoded = System.Text.Encoding.UTF8.GetBytes(encodeMe);
return Convert.ToBase64String(encoded);
}
这在类构造函数中调用:
public Booking(string name, string phone, string email, string date)
{
Name = Encode(name);
Phone = Encode(phone);
Email = Encode(email);
PreferredTime = DateTime.Parse(date);
}
到目前为止一切顺利,并且加密的数据已写入数据库。
但是,我想在读回该数据时使用以下函数对其进行解码:
public static string Decode(string decodeMe)
{
byte[] encoded = Convert.FromBase64String(decodeMe);
return System.Text.Encoding.UTF8.GetString(encoded);
}
我尝试将其添加到Set {}语句中,如下所示:
public string Name
{
get
{
return _name;
}
set
{
_name = Decode(value);
}
}
现在会发生什么? 预订记录由db.Booking.Add(booking);
的构造方法正确编码db.Booking.Add(booking);
,但是在执行db.SaveChanges();
会调用此Set {}语句db.SaveChanges();
并将未加密的数据添加到数据库中,但是以前的加密数据在检索到Display时会正确解码。 尝试解码未加密的数据会导致异常。
问题在于您的媒体资源不平衡:设置时会解码,但不会在任何地方编码。
还要注意,实体框架与您一样使用这些属性 。 因此,EF调用了吸气剂,该吸气剂获得了_name
,后者是使用_name = Decode(value);
。 结果:EF永远不会看到编码后的值,它只存在一秒钟的value
。
为了确保属性中的数据始终被编码,您应该将编码/解码保留在属性之外,如果需要“真实数据”(例如,显示时),请自己进行。
因此,该属性变为:
public string Name
{
get { return _name; }
set { _name = value; }
}
甚至
public string Name { get; set; }
在Booking
构造函数中,分配给属性之前,您已经在使用Encode()
。
在所有其他需要“实际”值的地方,都需要使用Decode(Name)
等。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.