【问题标题】:I need to validate a query string in asp.net [closed]我需要在 asp.net 中验证查询字符串 [关闭]
【发布时间】:2013-03-01 20:08:00
【问题描述】:
 Dim objItems As clsItems

'Loads the pages with the Gridview and Infomation pretaining to the Item selected
Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load

    Dim qryItemNum As String = Request.QueryString("qryItemNum")

    'Populates Gridview
    If Not Page.IsPostBack Then
        gvwCategorySelect.DataSource = clsCategory.GetList
        gvwCategorySelect.DataBind()

        'imgbtnPrev.Visible = False

        'If Not String.IsNullOrEmpty(qryItemNum) Then
        '    Dim ItemNum As Int32
        '    If Int32.TryParse(test, ItemNum) Then
        '        imgbtnPrev.Visible = (-1 < ItemNum)
        '    End If
        'End If
    End If


    objItems = New clsItems(qryItemNum)

    'Set up the from labels
    lblTitle.Text = objItems.Title
    lblPrice.Text = objItems.Price.ToString("C")
    lblDescription.Text = objItems.Description
    ImgItem.ImageUrl = "~/images/ItemImages/Item" & objItems.ItemNum & ".jpg"



End Sub

'Returns to pervious item
Protected Sub imgbtnPrev_Click(sender As Object, e As System.Web.UI.ImageClickEventArgs) Handles imgbtnPrev.Click

    Response.Redirect("~/ItemInfo.aspx?qryItemNum=" & objItems.ItemNum - 1)

End Sub

'Next item
Protected Sub imgbtnNext_Click(sender As Object, e As System.Web.UI.ImageClickEventArgs) Handles imgbtnNext.Click


    Response.Redirect("~/ItemInfo.aspx?qryItemNum=" & objItems.ItemNum + 1)

End Sub

在上面的代码中有 2 个图像按钮,它们在不同的 ItemNum 之间移动。我试图阻止用户单击上一个按钮,方法是在查询字符串为 1 时删除 imgbtnPrev 按钮。

错误信息显示位置 0 处没有行

dataRowObject = DBMethods.CreateTable(sqlString, sqlArg).Rows(0)

^ 这里是突出显示的地方。

【问题讨论】:

  • 问题是什么?
  • 只需使用 Request.QueryString 获取您的查询字符串值。做你想做的事
  • If Request.QueryString(objItems.ItemNum) = 1 Then imgbtnPrev.Visible = False End 如果我有这个但它似乎不起作用。我这在我的页面加载
  • 这是因为 QueryString 返回一个 String 并且您将它与 Integer 进行比较。有关详细信息,请参阅我发布的答案。

标签: asp.net sql vb.net validate-request


【解决方案1】:

试试这个

   int number;
   if(Request.QueryString["qryItemNum"]!= null)
    {
     bool isNumeric = int.TryParse(Request.QueryString["qryItemNum"].ToString(), out number);
      if(isNumeric == true)
      {
        if(Convert.ToInt(Request.QueryString["qryItemNum"])<=1)
        {
          imgbtnPrev = false;
        }
      }
   }

编辑: 我将其转换为 VB.NET

   Dim number As Integer
   If Request.QueryString("qryItemNum") IsNot Nothing Then
Dim isNumeric As Boolean = Integer.TryParse(Request.QueryString("qryItemNum").ToString(), number)
   If isNumeric = True Then
    If Convert.ToInt(Request.QueryString("qryItemNum")) <= 1 Then
        imgbtnPrev = False
    End If
   End If
   End If

【讨论】:

  • 这看起来像是这样做的方法(除了 2 次访问查询字符串),那么为什么不赞成?
  • 请在投反对票时发表评论。
  • 我投了反对票,因为没有错误检查。非数字查询字符串值会爆炸......还有错误的语言......还有其他问题会阻止它编译。
  • 是的,我没有看到 VB.Net 标签。我的错误
【解决方案2】:

我认为 VB 就是这样做的:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    If Not Page.IsPostBack Then
        imgbtnPrev = False
        Dim qryItemNum As String = Request.QueryString("qryItemNum")
        If Not String.IsNullOrEmpty(qryItemNum) Then
          Dim ItemNum As Int32
          If Int32.TryParse(qryItemNum, ItemNum) Then
            imgbtnPrev = (-1 < ItemNum)
          End If
        End If
    End If
End Sub

当然,这假设 imgbtnPrev 是在您的代码或 ASPX 页面中的某处定义的。

编辑:从您的评论之一imgbtnPrev.Visible = False 到您的原始问题,imgbtnPrev 似乎是您表单上的一个按钮。如果是这样的话,你会这样写:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    If Not Page.IsPostBack Then
        imgbtnPrev.Visible = False
        Dim qryItemNum As String = Request.QueryString("qryItemNum")
        If Not String.IsNullOrEmpty(qryItemNum) Then
          Dim ItemNum As Int32
          If Int32.TryParse(qryItemNum, ItemNum) Then
            imgbtnPrev.Visible = (-1 < ItemNum)
          End If
        End If
    End If
End Sub

EDIT2:这个版本使用Try...Catch来查看错误是什么:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    If Not Page.IsPostBack Then
        imgbtnPrev.Visible = False
        Try
          Dim qryItemNum As String = Request.QueryString("qryItemNum")
          If Not String.IsNullOrEmpty(qryItemNum) Then
            Dim ItemNum As Int32
            If Int32.TryParse(qryItemNum, ItemNum) Then
              imgbtnPrev.Visible = (-1 < ItemNum)
            End If
          End If
        Catch err As Exception
          Response.Write(err.Message)
        End Try
    End If
End Sub

希望对你有帮助!

【讨论】:

  • syed 首先回答了问题,但由于问题被标记为vb.net,所以我添加了这个。不过,我的 VB 并不是最好的。
  • 而不是使用“qryItemNum”。该值是通过 objItem.ItemNum 传递的,我可以用它替换它吗?
  • 这很好,但我认为你错过了那部分“ItemNum is less than or equal to 1
  • 哈!您发布的内容就像我发布了它的修复程序一样。感谢您的关注! :)
  • 不,它说“测试”没有声明
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-01-12
  • 2016-06-30
  • 2018-05-09
  • 1970-01-01
  • 2021-02-24
  • 2018-08-03
  • 1970-01-01
相关资源
最近更新 更多