Мы пытаемся умножить Eval на целое число. В скрытом поле costPass. Мы продолжаем получать ошибку, которая не может быть определена условными выражениями, потому что не существует неявного преобразования между int и string. Если я удалю условное выражение в costPass и оставлю Convert.ToInt32 (Eval («DeliveryTime»)) * 2 или 5, это значение будет правильным. Почему это не работает в условном выражении?Условное выражение не может быть определено, умножая Eval на число
<%# Convert.ToInt32(Eval("MaxNumber")) <= Convert.ToInt32(Eval("Enrolled")) ?
" <button type='button' disabled><b>FULL</b>
" + Eval("BeginDate", "{0 :MMMMMMMM dd, yyyy}") +
" - " + Eval("EndDate", "{0 :MMMMMMMM dd, yyyy}") + "</button>" :
"<form action='/register2.asp' method='post'>
<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))
На каком языке это? – Barmar
Трудно сказать, что вы делаете в этом грязном коде, но проблема, вероятно, в приоритете оператора. Попробуйте добавить круглые скобки, чтобы сделать ваше намерение понятным. – Barmar
Этот код находится внутри встроенного ретранслятора на странице .net. – Beaconettes