gpt4 book ai didi

asp.net - 如何根据属性值更新设计时 UserControl 界面?

转载 作者:行者123 更新时间:2023-12-02 17:57:54 25 4
gpt4 key购买 nike

我创建了一个具有以下公共(public)属性的 UserControl:

[Browsable(true)]
public string Text
{
get { return pnlLookupTable.GroupingText; }
set { pnlLookupTable.GroupingText = value; }
}

正如您可能已经猜到的那样,pnlLookupTable 是一个面板控件。我可以在“属性”窗口中更改“文本”属性的值,它会像应有的那样反射(reflect)在标记中。但是,页面内 UserControl 的设计 View 不会显示面板的更新的 GroupingText。我怎样才能做到这一点?

编辑:

根据要求,这里是该属性所属的整个类。您可以看到没有什么特别的事情发生:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class LookupTable : System.Web.UI.UserControl
{
[Browsable(true)]
public string Text
{
get { return pnlLookupTable.GroupingText; }
set { pnlLookupTable.GroupingText = value; }
}
}

这是 .ascx 文件的相关部分:

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="LookupTable.ascx.cs" Inherits="LookupTable" %>
<asp:Panel ID="pnlLookupTable" runat="server" GroupingText="Lookup Table">
<%-- Irrelevant content here. --%>
</asp:Panel>

我更改了一些标识符和其他琐碎的事情,以保护代码的专有性质。

我还应该重申,我正在设计模式下查看添加了控件的 Web 表单,并且正在更改 Text 属性。我想在设计器中直观地看到面板的 GroupingText 的更改。

最佳答案

我必须回顾一下 UserControlDesigner 代码...

短篇故事:我认为这是不可能的。

这是一个很长的故事:

据我所知,位于 ASCX 文件中的用户控件永远不会在设计器中运行。也就是说,ASCX 或 ASCX.CS 文件中的代码永远不会在 Visual Studio 中编译或运行。这是为了防止由于在 CLR 中无法卸载已加载的程序集而导致内存泄漏。为了运行用户控件中的代码,Visual Studio 必须将 ASCX 编译为 DLL,然后加载它,然后运行代码。每次对 ASCX 进行更改时,都必须再次执行此操作。每次发生此操作时,从 ASCX 生成的额外加载的 DLL 都会消耗更多内存。

由于 CLR 中的这一限制,用户控件设计器实际上并不编译或运行 ASCX 文件。相反,它解析 ASCX 文件并查找其中的控件,然后加载这些控件。对于在 ASCX 文件中找到的每个控件,它将创建关联的控件设计器并呈现该控件的设计时 HTML。

有几种方法可以解决这个问题:

  1. 您可以编写一个派生自 Control 的常规自定义控件,并将代码写入 CS 或 VB 文件中,而不是使用 ASCX 用户控件。
  2. 将 ASCX 编译为 DLL。 David Ebbo 写了一个 blog post关于如何做到这一点。

这两个解决方案应该有效的原因是它们都涉及将代码编译到 DLL 中。这个想法是,DLL 不会经常更改,因此 Visual Studio 可以安全地加载 DLL,而不必在每次 DLL 更改(和泄漏内存)时重新加载它。

关于asp.net - 如何根据属性值更新设计时 UserControl 界面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2062271/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com