我有一个简单的Web控件(TaskList),它可以有从LinkButton继承的子(Task),可以以声明方式或编程方式添加.这工作正常,但我无法在后面的代码中触发任务的onclick事件.代码 ..
[ToolboxData("<{0}:TaskList runat=\"server\"> </{0}:TaskList>")]
[ParseChildren(true)]
[PersistChildren(false)]
public class TaskList : System.Web.UI.Control
{
//[DefaultProperty("Text")]
public TaskList()
{}
private List<Task> _taskList = new List<Task>();
private string _taskHeading = "";
public string Heading
{
get
{
return this._taskHeading;
}
set
{
this._taskHeading = value;
}
}
[NotifyParentProperty(true)]
[PersistenceMode(PersistenceMode.InnerProperty)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public List<Task> Tasks
{
get
{
return this._taskList;
}
set
{
this._taskList = value;
}
}
protected override void CreateChildControls()
{
foreach (Task task in this._taskList)
this.Controls.Add(task);
base.CreateChildControls();
}
protected override void Render(HtmlTextWriter …Run Code Online (Sandbox Code Playgroud) 如何创建自定义控件(不是ASCX控件),更重要的是,在项目中使用它?我不想为它创建一个单独的项目或将其编译为DLL
我创建了一个简单的Asp.Net自定义控件,它自动组合所有正确的样式表以发送给客户端(基于浏览器类型/版本/等).
但是,因为在设计时头标签看起来像这样......
<head>
<cc:CssControl runat="server" />
</head>
Run Code Online (Sandbox Code Playgroud)
... VS无法为css类名提供intellisense.我已经尝试为控件创建一个ControlDesigner,通过覆盖GetDesignTimeHtml()返回一些硬编码的<link />,但这似乎也没有帮助.
有人有任何想法吗?
谢谢,
西蒙.
我扩展了服务器控件(不是用户控件)并将代码放在我的 app_code 文件夹中。我想在网络配置中添加标签前缀,但是
<add tagPrefix="cc1" namespace="mynamespace" />
Run Code Online (Sandbox Code Playgroud)
和
<add tagPrefix="cc1" namespace="mynamespace" assembly="currentwebsitename" />
Run Code Online (Sandbox Code Playgroud)
不工作。我收到此错误:错误 147 未知服务器标记“cc1:Control”
我创建了一个派生自LinkButton的asp.net Server控件,并向页面呈现一个小的javascript函数.
我想在页面上多次使用此控件,但只想在页面上呈现一次javascript.另一方面,我宁愿不手动将其添加到js文件中,因为我不希望将来忘记添加js文件.
这样做的最佳方式是什么?
我正在为我的服务器控件输出整个HTML,如下所示:
public override void Render(HtmlTextWriter output)
{
output.Write(myStringBuilder.ToString());
}
Run Code Online (Sandbox Code Playgroud)
myStringBuilder是一个StringBuilder对象,它是在一个单独的私有方法中手动构建的.
这是一种有效的方法吗?或者将HtmlTextWriter传递给我的私有方法并对HtmlTextWriter.Write()进行多次调用是否更好?
我正在创建一个自定义服务器控件来为我的Web窗体应用程序生成带有特定标记和JavaScript处理程序的按钮元素.当然,它们能够导致回发,因此我希望它们能够与ASP的任何验证控件一起使用,以进行表单验证,尤其是客户端框架.
此按钮服务器控件支持使用提供的代码在按钮标记中OnClientClick发出onclick属性的属性(主要用于当用户单击列表视图的删除按钮或类似时的简单确认重新提示),因此使用asp:Button控件的方法发出验证脚本作为onclick属性将非常无效.事实上,在标准上指定两者OnClientClick和ValidationGroup属性asp:Button结果非常糟糕.这是一个非常明显的例子,说明为什么不能开箱即用:
页面标记
<asp:Button ID="btnSaveAsp" ValidationGroup="vgMyValidationGroup" OnClientClick="return true;" runat="server" />
Run Code Online (Sandbox Code Playgroud)
呈现标记
<input type="submit" name="ctl00$cphBodyContent$lvMyList$ctrl0$btnSaveAsp" value="Save" id="cphBodyContent_lvUsers_btnSaveAsp_0"
onclick='return true; WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("ctl00$cphBodyContent$lvMyList$ctrl0$btnSaveAsp", "", true, "vgMyValidationGroup", "", false, false))'>
Run Code Online (Sandbox Code Playgroud)
以下是现有的非工作代码,用于通过验证对控件进行连接.除了发出类似的onclick属性之外,我无法找到关于如何使用方法实现此目的的更多文档.我认为我Page.ClientSCript.RegisterForEventValidation在重写AddAttributesToRender方法中的调用将连接客户端验证,但这似乎没有像我假设的那样起作用.如有必要,jQuery可用于绑定对按钮的click事件的附加处理:
自定义服务器按钮控件
<ToolboxData("<{0}:Button runat=server></{0}:Button>")> _
<ParseChildren(False)> _
<PersistChildren(True)> _
Public Class Button
Inherits System.Web.UI.WebControls.WebControl
Implements IPostBackDataHandler
Public Sub New()
MyBase.New(HtmlTextWriterTag.Button)
End Sub
<Category("Behavior")> _
<DefaultValue("")> _
Public Overridable Property PostBackUrl As String
Get
Return If(ViewState("PostBackUrl"), String.Empty) …Run Code Online (Sandbox Code Playgroud) asp.net validation webforms custom-server-controls clientscriptmanager
我正在编写一些Web服务器控件,以便更轻松地使用基本的jQuery UI主题控件和小部件.我在这个阶段需要做的就是在超链接中添加一些额外的CSS类.
下面的代码是我的Web服务器控件.
using System;
using System.ComponentModel;
using System.Security.Permissions;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace Fusion.UI.Controls
{
[
ToolboxData("<{0}:Hyperlink runat=\"server\"></{0}:Hyperlink>")
]
public class Hyperlink : System.Web.UI.WebControls.HyperLink
{
protected override void AddAttributesToRender(HtmlTextWriter writer)
{
writer.AddAttribute(HtmlTextWriterAttribute.Class, "fg-button ui-state-default ui-corner-all");
// Call underlying renderer
base.AddAttributesToRender(writer);
}
}
}
Run Code Online (Sandbox Code Playgroud)
这很好,并生成一个带有其他CSS类的超链接.但是,如果我还指定CssClass它最终创建一个double类属性:
<Fusion.UI:Hyperlink ID="Hyperlink1" runat="server" NavigateUrl="#" CssClass="ui-state-disabled" >Link</Fusion.UI:Hyperlink>
Run Code Online (Sandbox Code Playgroud)
这会生成以下HTML:
<a class="fg-button ui-state-default ui-corner-all" id="ctl00_cphMainContent_Hyperlink1" class="ui-state-disabled" href="#">Link</a>
Run Code Online (Sandbox Code Playgroud)
救命!我怎么能阻止这种情况发生?
我已经创建了一个asp.net自定义控件,现在想要从将使用该控件的页面传递一些值.有什么办法可以将我自己的属性添加到控件中(就像Label属性的Text属性一样) )?
我正在开发一个ASP.NET服务器控件,它使用jQuery作为一些客户端逻辑.我已将jQuery文件嵌入控件中作为资源.
我不想将使用控件的应用程序限制为特定版本的jQuery,我想继续使用我嵌入的jQuery版本.
我知道noconflict方法,但我看到的问题是我无法控制页面上脚本标签的顺序.
如果用户的jQuery版本包含在我之前,那么在我可以调用noconflict之前,我最终会覆盖它.
请帮忙
asp.net ×9
c# ×2
conflict ×1
css ×1
intellisense ×1
jquery ×1
properties ×1
validation ×1
versioning ×1
web-config ×1
webforms ×1