Transferring DropDownList values from one page to

2019-09-05 23:54发布

问题:

I have 2 pages, both with 3 similar DropDownLists. The first DropDownList needs to be populated before selecting the second, and the second before the third (which then populates a gridview).

Usually, a user will view data on one page, click a button, and then view data on the next page (usually with the same DropDownList selections). Is there any way to have the dropdownlists pre-populated with their old selections?

回答1:

You can pass values from one page to the other using the PreviousPage parameter that asp.net provides you. A small example:

You set the second page on the submit button as:

PostBackUrl="SecondPage.aspx"

On SecondPage.aspx you declare where you can get informations

<%@ PreviousPageType VirtualPath="~/FirstPage.aspx" %>

and you get them by...

if (Page.PreviousPage != null)
{
    if(Page.PreviousPage.IsCrossPagePostBack == true)
    {
        // and get the controls of the previous page as
        var SomeVariable = PreviousPage.DropDownlListId.SelectedValue;
    }
}

Some reference.
Cross-Page Posting in ASP.NET Web Pages
ASP.NET how to access public properties?
Cross-page postbacks and back again retaining data from source page
Cross-page posting. Is it a good pratice to use PreviousPage in Asp.net?



回答2:

If you have the form where the button that the users click post to the second page, the second page can look for the values of the DDL and set them on page load.



回答3:

There is a way:

  1. pass selections to the second page either via Session or Query String
  2. populate first dropdown
  3. select appropriate item
  4. repeat 2-3 for the rest of dropdowns

If you're looking for a magic solution that just "does that", I don't think this is possible.

p.s. You might rethink your design (if this is an option) and have the grid on the first page; bind the grid when user selects a value from the last dropdown (make sure you have AutoPostback set to True on your last dropdown in order to trigger the final postback)