Ced*_*ube 4 asp.net viewstate ajax pagemethods
ASP.NET 2.0,PageMethods。
美好的一天,
当我的页面上的下拉列表更改时,我正在使用ASP.NET AJAX PageMethods动态更改Label的文本。
我知道在客户端更改标签的文本不会在回发之间保留,这就是我的情况。我听说解决方案是将标签内容保留在隐藏字段中,然后在Page_Load中从该字段设置标签文本。
但是,这种解决方案对我来说似乎并不干净。还有其他选择或最佳做法吗?
谢谢!
为了澄清一下,我有一个带有人名的下拉列表。当下拉列表更改时,我想在标签中放入该人的电话。但是,我认为进行完整的回发并不是真正的最佳选择,因此我决定使用PageMethod来获得电话,并通过下拉列表中选择的项目的ID来检索电话,并将其放入标签中。
但是,由于其他控件导致了完整的回发,因此每次回发都会丢失电话。我知道将其放在隐藏字段中,然后在有完整的回发时将其设置回Page_Load中的标签是可行的,但是如果有其他解决方案,我会在措手不及。由于WebMethods被标记为静态,因此我无法编写Label.text = person.Telephone; 在他们中。
好像有ajax一样,您可以执行部分回发,将数字写入标签和视图状态,然后在page_load中将值从视图状态写入标签。
在DropDownList事件处理程序中:
string phone = <.. get phone number ...>;
myLabel.Text = phone;
ViewState["currentPhone"] = phone;
Run Code Online (Sandbox Code Playgroud)
在PageLoad上:
myLabel.Text = (ViewState["currentPhone"] != null) ? (string)ViewState["currentPhone"] : string.Empty;
Run Code Online (Sandbox Code Playgroud)
如果您不想使用Ajax,则可以在aspx文件中定义HiddenInputField,用javascript填充内容,并在Postback上用内容填充标签。在aspx上:
<asp:HiddenInputField runat="server" ID="myHiddenInput" />
Run Code Online (Sandbox Code Playgroud)
在PageLoad上:
myLabel.Text = myHiddenInput.Value;
Run Code Online (Sandbox Code Playgroud)