4

ASP.NET 2.0,页面方法。

再会,

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

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

但是,这个解决方案对我来说似乎并不干净。是否有任何其他替代方案或最佳实践?

谢谢!


澄清一下,我有一个人名下拉列表。当下拉列表更改时,我想在标签中放置那个人的电话。但是,我认为进行完整的回发并不是最好的选择,所以我决定使用 PageMethod 获取电话,传递在下拉列表中选择的项目的 Id 以检索电话,并将其放入标签中。

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

4

4 回答 4

5

由于您似乎有 ajax,您可以只进行部分回发,将数字写入标签并写入视图状态,然后在 page_load 中将视图状态中的值写入标签。

在 DropDownList 事件处理程序中:

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

在 PageLoad 上:

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

如果您不想使用 Ajax,您可以在您的 aspx 文件中定义一个 HiddenInputField,用 javascript 填充内容,然后在回发时用内容填充标签。在 aspx 上:

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

在页面加载上:

myLabel.Text = myHiddenInput.Value;
于 2009-04-01T17:24:39.090 回答
1

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

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

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

于 2009-04-01T16:55:37.880 回答
0

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

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

于 2009-04-01T14:03:29.573 回答
0

您是否考虑过将代码放入 Page_Load 以确保标签反映基于下拉列表值所需的值?这样,在每次回发时,您至少可以确保获得正确的值,并且您不必担心将其存储在 2 个位置。

于 2009-04-01T15:37:40.783 回答