2013-11-14 7 views
0

Я хочу напечатать ссылку в моем режиме бритвы с кодировкой id элемента. Поэтому я сделал метод расширения для кодирования int в строку base64.MVC Asp.Net: Динамические переменные и методы расширения в представлениях Razor

Код следующий:

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

item.IdItem является INT, но, как я работаю с динамическими переменными, то EncodeTo64() метод не признается в качестве метода расширения от переменной int. И это возвращает ошибку:

'int' doesn't have a definition for 'EncodeTo64'

Итак, я нашел решение: бросить динамическую переменную, например:

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

Это работает, но я не люблю это решение .. Знаете ли вы какой-либо способ избежать этого приведения и заставить его работать?

Спасибо!

EDIT:

Это метод расширения:

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

Есть ли причина, по которой вы не можете использовать EncodeTo64(), прежде чем передать модель в представление? –

+0

Можете ли вы предоставить код метода расширения? –

+0

На самом деле, я думаю, вы должны * кодировать его перед тем, как передать его в представление. – danielrozo

ответ

2

Это не может быть сделано с dynamic типа, потому что компилятор не сможет сделать вывод, какой метод расширения для использования.

Под капотом компилятор превратит это:

myVar.EncodeTo64(); 

В это:

MyStaticClass.EncodeTo64(myVar); 

Он должен иметь эту информацию во время компиляции, а потому, что вы используете dynamic, вы явно сообщая компилятору подождать, пока среда выполнения не выработает, какой вызов сделать.

У вас есть три варианта:

  1. Использование строго типизированная модели
  2. Добавить свойство/метод, который делает это для вас
  3. Живых с броском
+0

Я не хочу менять модель, потому что то, что я сказал выше, поэтому я думаю, что буду жить с актерским составом. Спасибо за помощь! –

Смежные вопросы