我想在我的剃刀视图中打印一个链接,其中包含项目的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);
}
答案 0 :(得分:2)
使用dynamic
类型无法完成此操作,因为编译器永远无法推断使用哪种扩展方法。
引擎盖下编译器会将其转为:
myVar.EncodeTo64();
进入这个:
MyStaticClass.EncodeTo64(myVar);
它必须在编译时获得此信息,但由于您使用的是dynamic
,因此您明确告诉编译器要等到运行时才能确定要调用哪个调用。
您有三种选择: