Как передать значение Viewstate с одной страницы aspx на другую страницу? - PullRequest
1 голос
/ 10 февраля 2012

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

Ответы [ 6 ]

5 голосов
/ 11 марта 2013

Если вы хотите использовать только viewstate для отправки данных на следующую страницу, тогда вам следует использовать метод server.transfer() вместо resposnse.redirect().Давайте предположим, что мы хотим передать viewstate по нажатию кнопки, как показано ниже:

    public void btnSer_OnClick(object sender, EventArgs e)
    {

        ViewState["yourvalue"] = "Name";
        ViewState["yourcity"] = "Shimla";
        Server.Transfer("Default.aspx");

    }

на той же странице создать метод класса statebag

     public StateBag ReturnViewState()
    {
        return ViewState;
    }

Теперь настраница, на которую вы хотите перевести, пусть здесь будет Default.aspx.Поместите следующую функцию в файл Default.aspx.cs

private StateBag PreviousPageViewState
    {
        get
        {
            StateBag returnValue = null;
            if (PreviousPage != null)
            {
                Object objPreviousPage = (Object)PreviousPage;
                MethodInfo objMethod = objPreviousPage.GetType().GetMethod("ReturnViewState");//System.Reflection class
                return (StateBag)objMethod.Invoke(objPreviousPage, null);

            }
            return returnValue;
        }
    }

Теперь давайте найдем значения viewstate предыдущей страницы (ViewState["yourvalue"] и ViewState["yourcity"])

сделать это при загрузке страницы Default.aspx

    protected void Page_Load(object sender, EventArgs e)
    {
        if (PreviousPage != null && PreviousPageViewState != null)
        {
            var sg = PreviousPageViewState["yourvalue"].ToString();
            var nev = PreviousPageViewState["yourcity"].ToString();
        }
    }

Итак, все готово.Вы можете получить доступ к значению viewstate на предыдущей странице.

2 голосов
/ 10 февраля 2012

Вы можете получить данные с предыдущей страницы тремя способами.

PostBackUrl

На первой странице / форме (First.aspx.cs) создайте публичное свойствосо списком:

public TextBox PostedTextBox { get { return TextBox1; } }

Установите для обратного URL-адреса кнопки значение Second.aspx

Вторая страница в aspx-файле после директивы @ Page add:

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

Затем в Form_Load на Second.aspx.cs вы можете извлечь значения:

if (PreviousPage != null)
{
    TextBox postedTextBox = PreviousPage.PostedTextBox;
    //...
}

Найти элемент управления / данные, используя PreviousPage

Вы можете найтиуправление с помощью:

if (PreviousPage != null)
{
  var control = PreviousPage.FindControl("ListBox1") as ListBox;
}

Запрос данных формы

Вы можете использовать GetValues:

Request.Form.GetValues("ctl00$MainContent$ListBox1");

возвращает массив строк, содержащий каждыйиз выбранных элементов.

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

Что вы можете сделать, это работать с постбэками между страницами, добавив PostBackUrl к вашей кнопке. Допустим, мы публикуем со страницы A на страницу B. Вы можете подписаться на событие кнопки Click кнопки A и заполнить открытое свойство A:

MyPublicProperty = ViewState["MyInfo"];

Вы можете использовать Page.PreviousPage в B сейчас, чтобы получить доступ к MyPublicProperty. Просто проверьте PreviousPage на ноль и приведите его к типу А.

Я знаю, что это буквально не переносит состояние представления, и я не слишком рад, что это решение в некоторых моих кодах, если честно, но это способ перекрестной публикации информации состояния представления.

0 голосов
/ 07 сентября 2016

Вы не можете получить доступ к ViewState одной формы из другой формы напрямую.

Но мы можем передать значение в коллекцию Context и затем получить доступ к значению на другой странице.

Form1:

Context.Items.Add ( "MyVar" , ViewState["yourvalue"].ToString() );

Form2:

string myValue = Context.Items["MyVar"].ToString();
0 голосов
/ 30 июля 2013
  1. создать открытое свойство на исходной странице, которое возвращает значение состояния просмотра.

например:

namespace MyNameSpace

{ 

    public class SourcePageClassName

     {
        public string MyValue

        {

            get

            {

                 if ( this.ViewState("MyViewStateValue") == null )

                 {

                     this.ViewState("MyViewStateValue") = "default value";

                 }

                 return this.ViewState("MyViewStateValue").ToString();

             }

             set

             {

                 this.ViewState("MyViewStateValue") = value;

             }
        }

    }
} 

2. do a Server.Transfer to the destination page.

e.g.:

Server.Transfer("Destination.aspx")

3.  On the destination page, on the page load event, I check whether the Context.Current.Handler is of the type of the source page and if it's then I cast it and read the property

e.g.:

...

protected void Page_Load(object sender, System.EventArgs e)

{ 

    if ( Context.Current.Handler != null && Context.Current.Handler.GetType() == typeof(SourcePageClassName) )

    {

        SourcePageClassName source = Context.Current.Handler as SourcePageClassName;

        System.Diagnostics.Debug.WriteLine(source.MyValue);

    }

} 

и все ...

в ASP.NET 2.0 вы можете сделать то же самое или сделать перекрестную обратную передачу, создав свойство, которое я упомянул на шаге 1

0 голосов
/ 10 февраля 2012

"Viewstate полезно только на странице" .если вы хотите сохранить на страницах, используйте "Session"

ex: in c #

Session["name"] ="the value that maintain";
...