ASP.NET使用PageMethods在回发之间保留label.text值的最佳方法

问题描述 投票:4回答:4

ASP.NET 2.0,PageMethods。

美好的一天,

当我在页面上更改下拉列表时,我正在使用ASP.NET AJAX PageMethods动态更改Label的文本。

我知道在客户端更改标签时,不会在回发之间保留标签文本,这就是我的情况。我听说解决方案是将标签内容保存在隐藏字段中,然后在Page_Load中设置该字段的标签文本。

但是,这个解决方案对我来说似乎并不干净。还有其他替代方案或最佳做法吗?

谢谢!


只是为了澄清,我有一个带有人名的下拉列表。当下拉列表发生变化时,我希望在标签中放置该人的电话。但是,我认为做一个完整的回发并不是最好的选择,所以我决定用一个PageMethod来获取电话,传递下拉列表中所选项目的ID来检索电话,然后把它放在标签中。

但是,由于其他控件会导致完全回发,因此每次回发都会丢失电话。我知道将它放在一个隐藏的字段中,然后在有完整的回发时将其设置回Page_Load中的标签会起作用,但我担心是否有另一个解决方案。由于WebMethods被标记为静态,我无法写出Label.text = person.Telephone;在他们中。

asp.net ajax viewstate pagemethods
4个回答
5
投票

由于您似乎有ajax,您可以只进行部分回发,将数字写入标签并进入viewstate,并在page_load中将值从viewstate写入标签。

在DropDownList事件处理程序中:

string phone = <.. get phone number ...>;
myLabel.Text = phone;
ViewState["currentPhone"] = phone;

并在页面加载:

myLabel.Text = (ViewState["currentPhone"] != null) ? (string)ViewState["currentPhone"] : string.Empty;

如果您不想使用Ajax,可以在aspx文件中定义HiddenInputField,使用javascript填充内容,在Postback上填充带有内容的标签。在aspx上:

<asp:HiddenInputField runat="server" ID="myHiddenInput" />

在页面加载:

myLabel.Text = myHiddenInput.Value;

1
投票

我建议坚持使用隐藏的字段解决方案,这样您就可以将逻辑保存在一个地方。

另一种方法是使用更新面板而不是页面方法,但我不这样做,因为这对性能不利。

正如其他人所说,第三种选择是在服务器端运行相同的逻辑,只要下拉的选定值发生变化。唯一的重复就是调用您已有的相应代码。


0
投票

如果标签值由下拉列表的值确定,则可以始终在服务器上复制该逻辑。

如果这个逻辑过于复杂,或者你不想将它维持多个位置,那么下一个最佳选择就是你所建议的。我不确定为什么你认为这不是一个干净的解决方案,这是从客户端获取信息到服务器的好方法。


0
投票

您是否考虑过将代码放在Page_Load中以确保标签反映了基于下拉列表值所需的值?这样在每个回发中你至少可以确保获得正确的值,而你不必担心将它存储在2个地方。

© www.soinside.com 2019 - 2024. All rights reserved.