无法确定条件表达式,将Eval乘以数字

时间:2014-03-14 21:28:15

标签: .net conditional

我们试图将Eval乘以整数。在隐藏字段costPass内。我们一直收到一个错误,即无法确定条件表达式,因为int和string之间没有隐式转换。如果我删除costPass中的条件表达式并保留Convert.ToInt32(Eval(" DeliveryTime"))* 2或5,则该值是正确的。为什么这在条件表达式中不起作用?

 <%# 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>"%>

代码意图/澄清

整个代码段用于.Net中的子转发器。

在.Net中使用C#和HTML的混合,代码从比较MaxNumber和Enrolled开始,两者都是在SELECT语句中计算的已注册的DB列。如果MaxNumber小于或等于Enrolled,则用户会看到禁用的FULL按钮。否则,用户会看到一个REGISTER按钮,其中包含该部分的BeginDate和EndDate。子转发器将每个部分写为单独的REGISTER按钮。

每个REGISTER按钮都附有表单数据。将变量传递给此表单无法正常工作,这就是为什么这部分是以这种方式编写的。首先,使用SectionID作为值创建隐藏字段sID,然后使用Session变量隐藏字段ID,因为它的值会提取用户登录时给出的用户ID。让我们跳过costPass,最后一部分是提交按钮,其值为REGISTER - BeginDate - EndDate。 BeginDate和EndDate格式化为显示月日,年。

造成问题的一块,costPass是一个隐藏的领域。 costPass的值将DB列ShortCourse与&#34; Y&#34;进行比较。如果ShortCourse等于,那么DB列DeliveryTime将转换为int32并乘以2,否则DeliveryTime将乘以5。

修改/ FIX: 根据建议添加括号,并更改了costPass值的一部分(参见代码)。

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

1 个答案:

答案 0 :(得分:0)

<强>固定: 根据建议添加括号,并更改了costPass值的一部分(参见代码)。

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