将十进制数据类型的值作为查询字符串传递时,输入字符串格式错误

时间:2015-02-20 16:00:55

标签: asp.net vb.net

我们的数据库中有以下字段名称,数据类型为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

有任何想法如何解决这个问题?

3 个答案:

答案 0 :(得分:2)

我会使用以下内容,因为很难看到发生了什么:

 <asp:hyperlinkfield datatextfield="UnitPrice"
            datanavigateurlfields="siteId,groupsize,facilityFees"
            datanavigateurlformatstring="~/details.aspx?siteId={0}&groupsize={1}&facilityFees={2}"   />

以上只展示了几个字段,但它使用datanavigateurlformatstring作为url,使用datanavigateurlfields作为参数,可以用逗号分隔的字符串指定。

MSDN Hyperlink reference

然后,您应该能够在网址中清楚地看到值是什么,并检查它们是否与目标网页的预期类型相匹配并进行转换,即

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