Передача параметров ASP.net UserControl - PullRequest
0 голосов
/ 09 января 2012

Я начинающий разработчик.Я создаю страницу + пользовательский элемент управления.Страница aspx содержит выпадающий список, который заполняется источником данных sql, который находится на странице aspx.Страница ascx содержит представление таблицы, заполненное другим источником данных sql, который находится на странице ascx.

В раскрывающемся списке aspx есть список стран, а в таблице сетки (на ascx) должны отображаться данные в зависимости от выбранной страны.

Моя страница ascx выглядит следующим образом.

    Partial Class UCtest
    Inherits System.Web.UI.UserControl

    Private priCountry As String

    Public Property PublicCountry() As String

    Get
        Return priCountry
    End Get
    Set(ByVal value As String)
        priCountry = value
    End Set

    End Property

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

    SqlDataSource1.SelectParameters.Add("Country", priCountry)

    End Sub
    End Class

    <%@ Control Language="VB" AutoEventWireup="false" CodeFile="UCtest.ascx.vb" Inherits="UCtest" %>
    <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
    DataSourceID="SqlDataSource1" 
    EmptyDataText="There are no data records to display.">
    <Columns>
    <asp:BoundField DataField="CompanyName" HeaderText="CompanyName" 
        SortExpression="CompanyName" />
    <asp:BoundField DataField="Country" HeaderText="Country" 
        SortExpression="Country" />
    </Columns>
    </asp:GridView>
    <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
    ConnectionString="<%$ ConnectionStrings:ConnectionString %>" 
    ProviderName="<%$ ConnectionStrings:ConnectionString.ProviderName %>" 

    SelectCommand="SELECT [CompanyName], [Country] FROM [Customers] WHERE ([Country] = ?)">
    <SelectParameters>

    </SelectParameters>
    </asp:SqlDataSource>

Моя страница aspx

    <%@ Register src="UCtest.ascx" tagname="UCtest" tagprefix="uc1" %>
    <asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="True" 
    DataSourceID="SqlDataSource1" DataTextField="Country" DataValueField="Country">
    </asp:DropDownList>
    <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
    ConnectionString="<%$ ConnectionStrings:ConnectionString %>" 
    ProviderName="<%$ ConnectionStrings:ConnectionString.ProviderName %>" 
    SelectCommand="SELECT DISTINCT [Country] FROM [Customers]"></asp:SqlDataSource>

    <uc1:UCtest ID="UCtest1" runat="server" />

    Protected Sub DropDownList1_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles DropDownList1.SelectedIndexChanged

    UCtest1.PublicCountry = DropDownList1.SelectedValue

    End Sub

Это прекрасно работает, если я просто передаю статические значения, такие как

    <uc1:UCtest ID="UCtest1" runat="server" PublicCountry="Mexico"/>

Так что я думаю, что правильно связал пользовательский контрольНо когда я запускаю страницу, я получаю только пустую страницу, что означает, что ascx не получает данные из aspx.что мне не хватает?

Ответы [ 2 ]

1 голос
/ 10 января 2012

Определите свойство с именем CountryId в вашем элементе управления ascx, и когда вы выбираете страну из выпадающего списка, которая является CountryDropdown_SelectedIndexChanged () Событие устанавливает свойство вашего элемента управления примерно такпривяжите свой gridview, передав этот идентификатор методу привязки, например,

    Private _CountryId As Integer = 0
Public Property CountryId() As Integer
    Get
        Return _CountryId
    End Get
    Set
        _CountryId = value
        bindGridView(_CountryId)
    End Set
End Property

Надеюсь, это поможет, если нет, и у вас есть сомнения или запросы, не стесняйтесь оставлять свои запросы в комментариях.Удачного кодирования.

1 голос
/ 09 января 2012

Может случиться так, что после того, как вы установите значение (в SelectedIndexChanged), вам нужно будет принудительно обновить пользовательский элемент управления, событие SelectedIndexChanged, вероятно, будет вызвано после того, как ваш пользовательский элемент управления подготовит свои данные.

Этого можно добиться, создав публичный метод в своем пользовательском элементе управления и вызвав его после установки значения из раскрывающегося списка.

...