0

我想在我的剃刀视图中打印一个链接,该链接带有项目的 id 编码。所以我做了一个扩展方法来将 int 编码为 base64 字符串。

代码如下:

@Html.ActionLink("Delete Item", "Delete", new{ idItem = item.IdItem.EncodeTo64() })

item.IdItem是一个 int,但是我使用动态变量时,EncodeTo64()方法不被识别为 int 变量的扩展方法。它返回一个错误:

“int”没有“EncodeTo64”的定义

所以,我找到了一个解决方案:强制转换动态变量,如下所示:

@Html.ActionLink("Delete Item", "Delete", new{ idItem = ((int)item.IdItem).EncodeTo64() })

它有效,但我不喜欢这个解决方案......你知道有什么方法可以避免这种演员阵容并让它发挥作用吗?

谢谢!

编辑:

这是扩展方法:

public static string EncodeTo64(this int number)
{
    byte[] encoded = System.Text.Encoding.UTF8.GetBytes(number.ToString());
    return Convert.ToBase64String(encoded);
}
4

1 回答 1

2

这不能用dynamic类型来完成,因为编译器永远无法推断要使用哪种扩展方法。

在引擎盖下,编译器会变成这样:

myVar.EncodeTo64();

进入这个:

MyStaticClass.EncodeTo64(myVar);

它必须在编译时拥有这些信息,但是因为您使用的是 a dynamic,所以您明确告诉编译器等到运行时才能确定要进行哪个调用。

你有三个选择:

  1. 使用强类型模型
  2. 添加为您执行此操作的属性/方法
  3. 与演员一起生活
于 2013-11-14T15:05:51.147 回答