大家好我怎样才能在ActionLink中传递加密的id,这就是我在视图中所写的内容
@model IEnumerable<forumAPP.tblTechnology> @foreach (var item in Model) { string techName=item.TechName; @Html.ActionLink(techName,"Details","Home",new { TopicID = item.TechID },null) // Here I would like to encrypt the TopicID <br /> <br /> @Html.DisplayFor(modelItem => item.TechDesc) }
解决方法
以下是一些可用于编码/解码的简单方法.
编码值不安全,正如您所看到的,解码它是微不足道的.如果你的目标是混淆id,这将有效.如果您需要保护它,您应该采取不同的方法.
编码值不安全,正如您所看到的,解码它是微不足道的.如果你的目标是混淆id,这将有效.如果您需要保护它,您应该采取不同的方法.
public string Encode( string encodeMe ) { byte[] encoded = System.Text.Encoding.UTF8.GetBytes( encodeMe ); return Convert.ToBase64String( encoded ); } public static string Decode( string decodeMe ) { byte[] encoded = Convert.FromBase64String( decodeMe ); return System.Text.Encoding.UTF8.GetString( encoded ); }
因此,您可以将这些方法放在控制器中,并使用viewBag将编码的TechId传递给视图
int techId = 1; var encoded = Encode(id.ToString()); ViewBag.Encoded = encoded;
然后在链接中使用它
@Html.ActionLink(techName,new { TopicID = ViewBag.Encoded },null)
(尽管如此,你应该考虑使用一个视图模型.ViewBag虽然是一种将数据传递给视图的简单方便,但不被认为是最佳实践.对视图模型和强类型视图的熟悉将使你的mvc生活更加丰富将来更容易.更不用说,为那些关注你的人生成更清晰,更易于维护的代码.)