2009-04-02 2 views
1

Если у меня есть кнопка внутри одной страницы, например, «main.aspx». И после щелчка я хочу, чтобы метод clicked в «main.aspx.cs» вызывал функцию с другой страницы * .aspx.cs, но также перенаправлял ее на страницу * .aspx ... это возможно?Функция вызова Asp.Net с другой страницы * .aspx.cs

+0

Возможно, более конкретный пример того, что вы пытаетесь сделать, поможет вам получить лучший ответ. У Shoban есть лучший ответ на ваш вопрос, но если вы можете быть немного более конкретным, мы можем помочь обеспечить правильность действий. – Daniel

ответ

0

Почему вы не просто перенаправляете параметр querystring, а затем выполняете функцию на целевой странице?

+0

Это то, что у меня было первоначально, загрузка onpage, это будет выглядеть, если бы была введена последовательность запросов и вызвать функцию, если это было ... проблема в том, что если бы я вспомнил эту функцию, то в pageload она вызывается дважды, потому что она не будет erase querystring – user84786

+0

есть ли способ сбросить запрос без перезагрузки страницы? – user84786

+0

все, что я пытаюсь исправить, и говорит, что коллекция читается только. Это то, что я пытаюсь, Request.Form.Clear(); – user84786

3

Вам нужно понять жизненный цикл страницы ASP.NET, и вы поймете, почему это не кошерный. Если вам действительно нужно вызывать метод с нескольких страниц, это звучит как хороший кандидат для какого-либо внешнего класса/объекта.

В качестве альтернативы вместо параметра querystring вы можете установить флаг Session, а затем перенаправить на эту новую страницу. Затем очистите флаг сеанса, когда вы вызываете метод этой страницы.

+0

+1 для указания, что это не кошер. -1 для использования сеанса для передачи действий –

+0

Бах, я полагаю, вы никогда не используете глобальные переменные? :) – Bryan

6

Более конкретный пример того, что вы пытаетесь сделать, будет полезен. В противном случае вы получите ответы на всевозможные ответы, многие из которых будут несовместимы.

Вы должны поместить общий код в папку App_Code. У вас также не должно быть бизнес-логики внутри кода кода.

Тот факт, что вам нужна одна страница для вызова метода на другой странице, указывает на то, что вы этого не сделали. Страницы предназначены для отображения и интерпретации действий, но они не должны содержать ни одну из бизнес-логики.

например. хромой пример корзины покупок.

 
    ProductView.aspx - calls Cart.AddToCart(Product p) 
    CartView.aspx - displays all items in the cart, and the user 
        can update or remove items. 
     - calls Cart.RemoveItem(int cartIndex) 
     - calls Cart.UpdateItem(int cartIndex, int newItemCount) 

Сама корзина не принадлежит ни CartView.aspx, ни ProductView.aspx. Вместо этого он принадлежит ~/App_Code/Cart.cs

Так что ваше решение может выглядеть как

 
/(root of your web folder) 
Product/ 
      ProductView.aspx 
      ProductView.aspx.cs 

Cart/ 
      CartView.aspx 
      CartView.aspx.cs 

App_Code/ 
      Cart.cs 
      Product.cs 

Кроме того, чтобы добавить папку App_Code, если он еще не существует, щелкните правой кнопкой мыши на веб-проекта и выберите Add ASP.NET folder и выберите App_Code

+0

Это имеет смысл. Являются ли функции внутри Cart.cs доступными только для CartView.aspx или доступны для любой страницы * .aspx? – user84786

+0

Все, что находится в ~/App_Code, доступно для всех страниц. –

1

В основном случае, для Main.aspx, чтобы перейти к Other.aspx и передать небольшое количество данных в строке запроса, чтобы указать действие.

Main.aspx

protected void OnSomeButtonClicked(object sender, EventArgs e) 
{ 
    if(someCondition) 
    { 
    Response.Redirect("~/Other.aspx?action=runAway"); 
    } 
} 

в Other.aspx

protected void Page_Load(object sender, EventArgs e) 
{ 
    if(!IsPostBack) 
    { 
    if("runAway".Equals(Request.QueryString["action"]) 
    { 
     RunAway(); 
    } 
    } 
} 

Вы также должны прочитать на Server.Transfer versus Response.Redirect. Какой из них использовать, зависит от ситуации.

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

0

Создайте объект из другого класса и вызовите метод.

protected Button1_Clicked(Sender s, Eventargs e){ 
     MyNamespace.Page_Other po = new MyNamespace.Page_Other(); 
     po.Method1(); 
     Response.Redirect("~/page_other.aspx"); 
} 
Смежные вопросы