none
如何自定义控件的标记前缀 RRS feed

答案

  • 刚才我试着用C#做了一次.

    为什么C#可以,而VB.NET不可以呢......

    希望论坛版主或者MS的人员看到能将这一问题反馈至微软VS开发中心.


    人要诚实!还要踏实! 我先为人人,人人再为我! 我的Spaces: http://mydodu.spaces.live.com/
    • 已标记为答案 Dodu.NET 2010年4月14日 6:40
    2010年4月14日 6:40

全部回复

  • 你好!

    我按照你给的地址做了一次是可行的。我的版本是 VS 2008。我测试的自定义控件代码如下:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Linq;
    using System.Text;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    
    [assembly: TagPrefix("X.WebForms.Controls", "aspSample")]
    namespace X.WebForms.Controls
    {
        [DefaultProperty("Text")]
        [ToolboxData("<{0}:SampleButton runat=server></{0}:SampleButton>")]
        public class SampleButton : WebControl
        {
            [Bindable(true)]
            [Category("Appearance")]
            [DefaultValue("")]
            [Localizable(true)]
            public string Text
            {
                get
                {
                    String s = (String)ViewState["Text"];
                    return ((s == null) ? String.Empty : s);
                }
    
                set
                {
                    ViewState["Text"] = value;
                }
            }
    
            protected override void RenderContents(HtmlTextWriter output)
            {
                output.Write(Text);
            }
        }
    }


    知识改变命运,奋斗成就人生!
    • 已标记为答案 Dodu.NET 2010年4月14日 6:40
    • 取消答案标记 Dodu.NET 2010年4月14日 6:42
    2010年4月14日 2:37
    版主
  • 我试了好多次都不行。。。 难道真的是版本的问题吗?VS2010的BUG ???


    人要诚实!还要踏实! 我先为人人,人人再为我! 我的Spaces: http://mydodu.spaces.live.com/
    • 已标记为答案 Dodu.NET 2010年4月14日 6:40
    • 取消答案标记 Dodu.NET 2010年4月14日 6:42
    2010年4月14日 5:28
  • '自定义控件类
    
    Imports System
    Imports System.ComponentModel
    Imports System.Security.Permissions
    Imports System.Web
    Imports System.Web.UI
    Imports System.Web.UI.WebControls
    
    <Assembly: TagPrefix("Samples.AspNet.VB.Controls", "Sample")> 
    Namespace Samples.AspNet.VB.Controls
        < _
        AspNetHostingPermission(SecurityAction.Demand, _
            Level:=AspNetHostingPermissionLevel.Minimal), _
        AspNetHostingPermission(SecurityAction.InheritanceDemand, _
            Level:=AspNetHostingPermissionLevel.Minimal), _
        DefaultProperty("Text"), _
        ToolboxData( _
            "<{0}:WelcomeLabel runat=""server""> </{0}:WelcomeLabel>") _
        > _
        Public Class WelcomeLabel
            Inherits WebControl
            < _
            Bindable(True), _
            Category("Appearance"), _
            DefaultValue(""), _
            Description("The welcome message text."), _
            Localizable(True) _
            > _
            Public Overridable Property Text() As String
                Get
                    Dim s As String = CStr(ViewState("Text"))
                    If s Is Nothing Then s = String.Empty
                    Return s
                End Get
                Set(ByVal value As String)
                    ViewState("Text") = value
                End Set
            End Property
    
            Protected Overrides Sub RenderContents( _
                ByVal writer As HtmlTextWriter)
                writer.WriteEncodedText(Text)
                If Context IsNot Nothing Then
                    Dim s As String = Context.User.Identity.Name
                    If (s IsNot Nothing) AndAlso (s <> String.Empty) Then
                        Dim split() As String = s.Split("\".ToCharArray)
                        Dim n As Integer = split.Length - 1
                        If (split(n) <> String.Empty) Then
                            writer.Write(", ")
                            writer.Write(split(n))
                        End If
                    End If
                End If
                writer.Write("!")
            End Sub
        End Class
    End Namespace
    
    
    '引用页面
    
    <%@ Page Language="vb" AutoEventWireup="false" CodeBehind="WebForm1.aspx.vb" Inherits="SecondLife.WebForm1" %>
    
    <%@ Register Assembly="SecondLife" Namespace="SecondLife.Samples.AspNet.VB.Controls" TagPrefix="cc1" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    
    <head runat="server">
        <title></title>
    </head>
    
    <body>
        <form id="form1" runat="server">
            <div>
                <cc1:WelcomeLabel ID="WelcomeLabel1" runat="server" />
            </div>
        </form>
    </body>
    </html>

    现在我用的是vs2008,怎么设置前缀都是CC!!! 这是怎么回事?


    人要诚实!还要踏实!我先为人人,人人再为我! 我的Spaces: http://mydodu.spaces.live.com/
    • 已编辑 Dodu.NET 2010年4月14日 5:48
    • 已标记为答案 Dodu.NET 2010年4月14日 6:40
    • 取消答案标记 Dodu.NET 2010年4月14日 6:42
    2010年4月14日 5:38
  • 这个前缀不是由这里来指定的吗?

    TagPrefix="cc1"
     
    • 已标记为答案 Dodu.NET 2010年4月14日 6:41
    • 取消答案标记 Dodu.NET 2010年4月14日 6:42
    2010年4月14日 5:47
  • 这是添加控件的时候自动生成的, 当然还可以手动修改.

    MSDN上说是可以设置默认值的, 就是给出的例子. 可是我怎么尝试都不行.

    2楼版主也做了一次,他也说可以的.


    人要诚实!还要踏实!我先为人人,人人再为我! 我的Spaces: http://mydodu.spaces.live.com/
    • 已标记为答案 Dodu.NET 2010年4月14日 6:40
    • 取消答案标记 Dodu.NET 2010年4月14日 6:42
    2010年4月14日 6:28
  • 刚才我试着用C#做了一次.

    为什么C#可以,而VB.NET不可以呢......

    希望论坛版主或者MS的人员看到能将这一问题反馈至微软VS开发中心.


    人要诚实!还要踏实! 我先为人人,人人再为我! 我的Spaces: http://mydodu.spaces.live.com/
    • 已标记为答案 Dodu.NET 2010年4月14日 6:40
    2010年4月14日 6:40