2014-03-14 3 views
0

Мы пытаемся умножить Eval на целое число. В скрытом поле costPass. Мы продолжаем получать ошибку, которая не может быть определена условными выражениями, потому что не существует неявного преобразования между int и string. Если я удалю условное выражение в costPass и оставлю Convert.ToInt32 (Eval («DeliveryTime»)) * 2 или 5, это значение будет правильным. Почему это не работает в условном выражении?Условное выражение не может быть определено, умножая Eval на число

<%# Convert.ToInt32(Eval("MaxNumber")) <= Convert.ToInt32(Eval("Enrolled")) ? 
"&nbsp;&nbsp;&nbsp;&nbsp;<button type='button' disabled><b>FULL</b> 
&nbsp;&nbsp;&nbsp;&nbsp; " + Eval("BeginDate", "{0 :MMMMMMMM dd, yyyy}") + 
" - " + Eval("EndDate", "{0 :MMMMMMMM dd, yyyy}") + "</button>" : 
"<form action='/register2.asp' method='post'>&nbsp;&nbsp;&nbsp;&nbsp; 
<input type='hidden' name='sID' value='" + Eval("SectionID") + "'> 
<input type='hidden' name='ID' value='" + Session["BeaconLogin"] + "'> 
<input type='hidden' ID='costPass' name='costPass' 
value='" + Eval("ShortCourse") == "Y" ? 
Convert.ToInt32(Eval("DeliveryTime")) * 2 : 
Convert.ToInt32(Eval("DeliveryTime")) * 5 + "' 
runat='server'><input type='submit' value='Register - " + Eval("BeginDate", 
"{0 :MMMMMMMM dd, yyyy}") + " - " + Eval("EndDate", "{0 :MMMMMMMM dd, yyyy}") + 
"' style='width:300px;'></form>"%> 

Код Intent/Разъяснение

Весь фрагмент кода используется в детском повторителя в .Net.

Используя смесь C# и HTML внутри .Net, код начинается с сравнения MaxNumber и Enrolled, оба столбца DB с Enrolled вычисляются в инструкции SELECT. Если MaxNumber меньше или равно Enrolled, пользователь видит отключенную кнопку FULL. Кроме того, пользователь видит кнопку REGISTER с BeginDate и EndDate этого раздела. Детский ретранслятор записывает каждый раздел в виде отдельной кнопки REGISTER.

Каждая кнопка РЕГИСТРА имеет прикрепленные данные формы. Передача переменных в эту форму работала неправильно, поэтому эта часть написана таким образом. Во-первых, sID скрытого поля создается с использованием значения SectionID, а затем скрытого идентификатора поля с переменной Session, поскольку это значение вытягивает идентификатор пользователя, заданный при входе в систему. Давайте теперь пропустите costPass, последняя часть - кнопка отправки, которая имеет значение РЕГИСТРАЦИЯ - BeginDate - EndDate. BeginDate и EndDate отформатированы, чтобы отображать месяц, год.

Кусок, вызывающий проблемы, costPass - это скрытое поле. Значение costPass сравнивает столбец DB ShortCourse с «Y». Если ShortCourse равна затем БД столбец DeliveryTime преобразуется в int32 и умноженное на 2 остальное, что DeliveryTime умножается на 5.

EDIT/FIX: Добавлено круглые скобки, как это было предложено, и изменил часть стоимости costPass (см код).

(Eval("ShortCourse").Equals("Y") ? (Convert.ToInt32(Eval("DeliveryTime")) * 2) 
    : (Convert.ToInt32(Eval("DeliveryTime")) * 5)) 
+0

На каком языке это? – Barmar

+0

Трудно сказать, что вы делаете в этом грязном коде, но проблема, вероятно, в приоритете оператора. Попробуйте добавить круглые скобки, чтобы сделать ваше намерение понятным. – Barmar

+0

Этот код находится внутри встроенного ретранслятора на странице .net. – Beaconettes

ответ

0

ИСПРАВЛЕНО: Добавлены круглые скобки, как было предложено, и изменил часть стоимости costPass (см код).

(Eval("ShortCourse").Equals("Y") ? (Convert.ToInt32(Eval("DeliveryTime")) * 2) 
    : (Convert.ToInt32(Eval("DeliveryTime")) * 5)) 
Смежные вопросы