2012-09-12 202 views
2

我有两个按钮与点击功能C#/ asp.net全局变量?

第一个单击时获取分配变量。

如何让我的第二个按钮来从第一按钮的变量,当我点击按钮2?

这似乎并没有工作。由于第二个按钮不能识别变量。

感谢

编辑:

只是为了澄清我的代码生成的PDF文件。按钮1选择要使用的模板的网址。并在按钮2(生成PDF的那个)我想要它从按钮1获得变量集,以便它知道要使用的模板。

编辑2: 我的代码的工作,但只有当我不使用AJAX更新面板。看来,我试图设置变量不会与AJAX

设置
+1

你能和你已经尝试什么分享您的代码? –

+0

没有什么可以分享的,想象两个带有点击功能的准系统按钮。第一个被分配一个字符串。我想第二个按钮,能够 –

+1

您需要了解“范围”,以使用该字符串 - 这里有一个链接:http://msdn.microsoft.com/en-us/library/ms973875.aspx –

回答

2

您的按钮具有Id,你得到这个按钮与他Id

诺塔:您可以依次添加RUNAT =“服务器”在服务器端可视化

<asp:Button id="Button1" 
      Text="Click " 
      OnClick="Btn1_Click" 
      runat="server"/> 

<asp:Button id="Button2" 
      Text="Click " 
      OnClick="Btn2_Click" 
      runat="server"/> 

void Btn2_Click(Object sender, EventArgs e) 
{ 
    Button1.Text = "test after click on button 2"; 

    Template = ...;//Set your value 
} 


void Btn1_Click(Object sender, EventArgs e) 
{ 
    Button2.Text = "test after click on button 1"; 

    //Here you can get your value after post. 
    var result = Template; 
} 

这不是主题,但在委托中,您也可以通过传递sender参数来获取objet按钮。

var button = sender as Button; //You get button who raise event 

为了管理Template Path财产。

public string Template 
{ 
    get 
    { 
     if(ViewState["Template"] != null) 
     {  
     return (string)ViewState["Template"]; 
     } 
    } 

    set{ViewState["Template"] = value;} 
} 
+0

这是可行的,因为'Button1.Text'和'Button2.Text'一个持久性机制 - 即'Button'控件使用ASP.NET ViewState的概念。这是你需要了解的坚持状态。 – tomfanning

+0

默认情况下,TomFanning和EnableViewState =“true”,谢谢你的额外评论 –

+0

我关闭了视图状态!这可能是我的问题,因为我在提问之前尝试了这个问题。我会放弃这一点。 –

-1

我猜你正在寻找访问用于该值在Button1的Click事件中设置按钮2的单击事件中一个变量的值?

private string myPrivateString = ""; 

void Page_Load()//Not sure of correct method signature 
{ 
    if(Page.IsPostBack) 
    { 
    myPrivateString = Session["myPrivateString"]; 
    } 
} 

void Button1_Click(object sender, EventArgs e) 
{ 
    //There will a postback before this gets executed 
    myPrivateString = "Value Set From Button 1"; 
    Session["myPrivateString"] = myPrivateString; 
} 

void Button2_Click(object sender, EventArgs e) 
{ 
    //There will a postback before this gets executed 
    //Accessing myPrivateString here without setting value from session 
    //will return empty string as after PostBack its a new page thats rendered. 
    myPrivateString = Session["myPrivateString"]; // Or do it in the Page_Load event 
} 

我想现在你可以得到button2 click事件里面的值。
另请阅读ASP.NET页面生命周期以及ASP.NET框架如何处理按钮点击等客户端事件。

+0

在这种情况下,你应该真正使用视图状态,而不是会话。 – Servy

+0

@Servy他没有要求控制属性,他想要在两个不同的事件中访问一个全局变量的值? ViewState仅适用于Text等控件属性。为什么downvote?看看这些标签。 –

+0

视图状态不仅仅用于控制属性。控件属性存储在那里,但其他一些东西也是如此,包括适当的用户内容。这都是范围问题。 ViewState的内容被限制在这个页面,以及所有的回传到这个页面。它作为隐藏的HTML字段与每个请求/响应来回传递。会话存储在服务器的内存中,并且将远远超出此单页生命周期的范围。这很糟糕,这既是因为浪费资源,也是因为它意味着你永远无法打开这个页面两次(无论如何都没有错误)。 – Servy