如果我在一个页面中有一个按钮,例如“main.aspx”。单击后,我希望“main.aspx.cs”中单击的方法从不同的* .aspx.cs页面调用函数,但也可以重定向到* .aspx页面......这可能吗?
答案 0 :(得分:6)
您尝试做的更具体的例子会很有用。否则你会得到各种各样的答案,其中很多都是不合适的。
您应该将公共代码放在App_Code文件夹中。您还应该在表单代码隐藏中没有任何业务逻辑。
您需要一个页面来调用另一个页面中的方法这一事实表明您还没有这样做。页面用于显示和解释操作,但它们不应包含任何业务逻辑。
e.g。一个购物车的蹩脚例子。
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
答案 1 :(得分:3)
您需要了解ASP.NET页面生命周期,您将看到为什么这不是Kosher。如果你真的需要从多个页面调用一个方法,它听起来像是一个外部类/对象的好选择。
或者,您可以设置Session标志,然后重定向到此新页面,而不是使用querystring参数。然后在调用该页面的方法时清除会话标志。
答案 2 :(得分: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参数可以由用户轻松更改,因此请始终对其进行验证,绝不相信用户。
答案 3 :(得分:0)
为什么不直接使用querystring参数重定向,然后在目标页面上执行该功能?
答案 4 :(得分:0)
从其他页面类实例化一个对象并调用该方法。
protected Button1_Clicked(Sender s, Eventargs e){
MyNamespace.Page_Other po = new MyNamespace.Page_Other();
po.Method1();
Response.Redirect("~/page_other.aspx");
}