我们的数据库中有以下字段名称,数据类型为decimal:
RentalFee
ExtraHourFee
CancelFee
KeyDeposit
当尝试将其值作为查询字符串从一个页面传递到另一个页面时,我们遇到Input string was not in a correct format
错误。
以下是标记的摘录:
<asp:TemplateField HeaderText="Select" SortExpression="siteid">
<ItemTemplate>
<asp:HyperLink ID="hdReserve" Text="Select" runat="server"
NavigateUrl='<%# "Reserve.aspx?id=" + Eval("siteId") + "&groupsize=" + ddlPartySize.SelectedValue + "&facilityFees= " + Eval("RentalFeeAmount") + "&facilityFees= " + Eval("RentalFeeAmount") + "&depoitAmt= " + Eval("DepositAmount") + "&cancelAmt= " + Eval("CancellationAmount") + "&keydeptAmt= " + Eval("KeyDepositAmount") %>' />
</ItemTemplate>
</asp:TemplateField>
然后从代码隐藏中获取值:
Dim intRentalFee As Decimal
Dim intExtraHourFee As Decimal
Dim intCancelFee As Decimal
Dim intKeyDeposit As Decimal
rentalfeeHide.Text = Request.QueryString("facilityfees")
extrahrfeeHide.Text = Request.QueryString("extrahour")
cancelfeeHide.Text = Request.QueryString("cancelAmt")
keydepositfeeHide.Text = Request.QueryString("keydeptAmt")
intRentalFee = rentalfeeHide.Text
intExtraHourFee = extrahrfeeHide.Text
intCancelFee = cancelfeeHide.Text
intKeyDeposit = keydepositfeeHide.Text
' Add all up to get total fee
lblTotal.Text = intRentalFee + intExtraHourFee + intCancelFee + intKeyDeposit
有任何想法如何解决这个问题?
答案 0 :(得分:2)
我会使用以下内容,因为很难看到发生了什么:
<asp:hyperlinkfield datatextfield="UnitPrice"
datanavigateurlfields="siteId,groupsize,facilityFees"
datanavigateurlformatstring="~/details.aspx?siteId={0}&groupsize={1}&facilityFees={2}" />
以上只展示了几个字段,但它使用datanavigateurlformatstring
作为url,使用datanavigateurlfields
作为参数,可以用逗号分隔的字符串指定。
然后,您应该能够在网址中清楚地看到值是什么,并检查它们是否与目标网页的预期类型相匹配并进行转换,即
var facilityfees = Convert.ToDecimal(Request.QueryString("facilityfees"));
答案 1 :(得分:1)
在代码后面做...
hdReserve.NavigateUrl = string.Format("../Reserve.aspx?id=?id={0}&groupsize={1}&facilityFees={2}...", siteId, ddlPartySize.SelectedValue, intExtraHourFee...)
答案 2 :(得分:0)
除了Huchanoid的答案,你需要为你的代码隐藏做一些修改。
首先你说这些值是十进制的但是你用它们作为整数?他们是谁?
接下来,什么是查询字符串不存在...有人只是键入页面名称...我想你需要检查这些值是否存在然后将它们作为整数(或十进制)投射...使用
If Not IsNothing(Request.QueryString("yourQueryStringName")) Then
'check that they are numeric or use a try catch...
If isNumeric(Request.QueryString("yourQueryStringName")) Then
'Querystring is Numeric
intYourQueryStringName = Cint(Request.QueryString("yourQueryStringName"))
Else
'Error Querystring is not numeric
Response.Redirect("Somwhere.aspx")
End If
Else
'QueryString does not exist
Response.Redirect("Somwhere.aspx")
End If