1

我将如何在 asp 中运行查询并将其存储在数组中。然后用数组遍历每条记录,而不必每次都刷新页面。

例如

Sub loaddata()
    Dim conn As New IfxConnection(connectionstring)

    Dim results() As String
    Dim i As Integer = 0

    conn.ConnectionString = connectionstring
    Try
        conn.Open()
        MsgBox("Made connection!")

    Catch ex As Exception
        MsgBox(ex.Message)
    End Try
    Dim cmd As New IfxCommand("Select name from table", conn)
    Dim reader As IfxDataReader = cmd.ExecuteReader(CommandBehavior.CloseConnection)
    While reader.Read()
        results(i) = reader("name")
        i += 1

    End While
    reader.Close()
    conn.Close()
End Sub

结果存储在 results(i) 中

假设我有一个按钮,每次我希望它转到结果数组中的下一项时都会显示下一步。我不希望页面刷新。我怎么做?

4

2 回答 2

1

您需要考虑如何设置页面。有很多方法可以做到这一点。

如果您在页面加载时获得所有记录,则可以将它们分配给各自的控件。为了让它出现,如果它们在许多页面上,您可以使用 MultiView 控件。

标记

<asp:MultiView ID="MultiView1" runat="server" ActiveViewIndex="0">
   <asp:View ID="View1" runat="server"> 
      <asp:Label ID="lblRecordOne" runat="server" />
   </asp:View>
   <asp:View ID="View2" runat="server"> 
      <asp:Label ID="lblRecordTwo" runat="server" />
   </asp:View>         
</asp:MultiView>
<asp:Button ID="btNext" runat="server">Next</asp:Button>

代码隐藏

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
     'Call your method that loads the data to results
     Dim results() As String = loaddata()
     'Set the data
     lblRecordOne.Text = results(0)
     lblRecordTwo.Text = results(1)
End Sub

Protected Sub btNext_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btNext.Click

 'There is a much better way to go about this, but for this 
 'demos sake here is the basic idea
 MultiView1.SetActiveView(View2)

End Sub

您要记住的是,每个 View 控件在 MultiView 内都有一个索引。因此,您需要一种方法来跟踪活动视图是什么。当用户单击下一个按钮时,您将视图前进一个。

就 MVC 应用程序而言

控制器

public class HomeController 
{
   // /Home/GetRecord/{id}
   public ViewResult GetRecord(int? id)
   {
        int modelID;
        if (id == null) { modelID = 0; }
        ViewBag.CurrentID = modelID;
        // This will send the value to the view
        // I would refactor loaddata to only return one record at a time
        // based on an id or an index
        return View(loaddata(modelID));
   }
}

看法

<label>@Model.Result</label>
@Html.ActionLink("GetRecord", "Home", new { id = ViewBag.CurrentID + 1 })

每次您单击 ActionLink 时,它都会通过一个记录集前进。

如果第一条记录是Hello,第二条记录是World:

/Home/GetRecord/0 - 你好

/Home/GetRecord/1 - 世界

抱歉,我将其切换到 C#,我更喜欢徒手编写 C# 而不是 VB。VB中的代码非常相似。如果你需要一个转换器去http://converter.telerik.com/

于 2012-06-13T14:39:56.780 回答
1

您应该使用 RegisterClientScript 在控件或变量中呈现结果,并通过 javascript 控制导航

于 2012-06-13T14:30:04.560 回答