我正在尝试创建一个自定义控件,即"gridview",如控件,但特别是对于实现某些自定义接口的业务对象.
在这样做时,我遇到了以下问题.
我有一个控件,我已禁用viewstate(我不想重新启用它),它有一个我想要启用viewstate的子控件.因为父母被禁用,我似乎无法让子控件上的视图状态工作.有没有人有任何想法如何让它工作?
我在自定义控件中有以下属性:
List<myClass> _items;
public List<myClass> Items{
get { return _items; }
set { _items= value; }
}
Run Code Online (Sandbox Code Playgroud)
在我的代码隐藏中,我将项目添加到集合中,如...
myCustomControl.items.Add(new myClass());
Run Code Online (Sandbox Code Playgroud)
但是,这些不会在回发中持续存在.在自定义控件中允许持久性的正确方法是什么?
我有一个自定义服务器控件似乎工作正常,直到我把它放在UpdatePanel.一旦进入UpdatePanel,它继续正常工作,但当我的自定义服务器控件执行回发时,UpdatePanel现在会执行完全回发.
我是否需要做任何事情来使我的自定义服务器控件在UpdatePanel内部执行异步回发?
以下是导致完整回发的相关代码.ecs:Pager控件是我的自定义控件,即使它在UpdatePanel中,也会导致OnCommand事件的完全回发.
<asp:UpdatePanel ID="ClosedIssuesUpdatePanel" runat="server">
<ContentTemplate>
<ecs:Pager ID="ClosedIssuesPager" OnCommand="ClosedIssuesPager_Command" runat="server" />
<asp:Repeater ID="ClosedIssuesRepeater" runat="server">
....
</asp:Repeater>
</ContentTemplate>
</asp:UpdatePanel>
Run Code Online (Sandbox Code Playgroud) .net postback updatepanel asynchronous custom-server-controls
我们开始了一个新项目,项目的性质非常具有互动性,并且需要丰富的UI.
我们需要一组Rich UI开发所需的控件.谷歌搜索时我找到了Obout.我从来没有听说过他们,除了Telerik,ComponentOne,NetAdvantage之外,从未见过其他成员告诉我这样的名字.这些是我们听过的着名名字,但没有这个名字.
但是,控制给人一种积极的感觉.但是,当您购买某些服务时,有两件事情至关重要:他们的客户支持有多好?他们的价格多少可行?
另外,他们发布补丁/更新的速度有多快?如果我们在开发过程中发现错误或错误会发生什么呢?他们为此提供快速解决方案吗?
我在这里做出决定有点困惑.我需要你的帮助,经验和反馈.
asp.net rich-internet-application custom-server-controls obout
我的自定义服务器端ajax控件实现了IScriptControl:
第一种方法发送javascript文件,第二种方法基于一些发送的早期.js文件创建javascript对象.
在我的'AssembleyInfo'文件中,我在Properties explorer中添加了下面的行和标记的.js文件作为'Embedded resourece':
// this allows access to this files
[assembly: WebResource("ProjectName.file1.js", "text/javascript")]
[assembly: WebResource("ProjectName.file2.js", "text/javascript")]
Run Code Online (Sandbox Code Playgroud)
这是IScriptControl的实现:
public IEnumerable<ScriptReference>
GetScriptReferences()
{
yield return new ScriptReference("ProjectName.file1.js", this.GetType().Assembly.FullName);
yield return new ScriptReference("ProjectName.file2.js", this.GetType().Assembly.FullName);
}
public IEnumerable<ScriptDescriptor>
GetScriptDescriptors()
{
ScriptControlDescriptor descriptor = new ScriptControlDescriptor("ProjectName.file1", this.ClientID);
//adding properties and events (I use "AnotherName" on the safe side to avoid potentional namespace problems
ScriptControlDescriptor descriptor2 = new ScriptControlDescriptor ("AnotherName.file2", this.ClientID);
//adding properties and events
yield return descriptor;
yield return descriptor2;
} …Run Code Online (Sandbox Code Playgroud) 在我进入自定义ASP.NET控件开发深度的过程中,我显然已经了解了ASP.NET PostBack模型以及它如何影响控件开发.
我知道控件在ASP.NET中没有"生命周期",因此必须在每次加载页面时重新初始化.我们通过将对象值/参数持久化到ViewState来克服这个问题.
因此,我阅读的许多文章都建议不要使用PostBack,因为这会给页面增加相当大的开销.我不是在寻找如何禁用它,我知道.
我在寻找的是:
我们有什么替代方法来使用PostBack模型来初始化控件?
我知道我们可以使用QueryString,但这看起来非常混乱,显然不可靠.
理想情况下,您可以概述一下不同方法的架构/设计以及它的专业/概念.
非常感谢^ _ ^
我已经阅读过这一点,它解释了在创建自定义控件时何时选择Web Control vs. Control,但这还不够.我已经看到自定义控件从它们向UI分发内容时继承.
http://msdn.microsoft.com/en-us/library/yhzc935f.aspx
"如果您的控件在客户端上呈现用户界面(UI)元素或任何其他可见元素,您应该从System.Web.UI.WebControls .. ::.WebControl(或派生类)派生您的控件.如果您的控件呈现在浏览器中不可见的元素,例如隐藏元素或元元素,从System.Web.UI .. ::.Control派生您的控件.WebControl类派生自Control并添加与样式相关的属性,例如作为Font,ForeColor和BackColor.此外,源自WebControl的控件参与ASP.NET的主题功能,而无需您做任何额外的工作."
所以使用WebControl的唯一原因是你想使用它们的样式功能吗?我只是想用stringbuilder输出字符串,所以我不关心那些东西.我更喜欢直接使用无表格设计和字符串来形成我的控件呈现的HTML.
让我假装由于某种原因我想创建一个派生自Control而不是WebControl的自定义控件.让我们假设我需要处理属性(即实现IAttributeAccessor),并且我想通过像WebControl一样使用AttributeCollection来实现.
WebControl实现Attributes属性,如下所示:
public AttributeCollection Attributes
{
get
{
if (this.attrColl == null)
{
if (this.attrState == null)
{
this.attrState = new StateBag(true);
if (base.IsTrackingViewState])
{
this.attrState.TrackViewState();
}
}
this.attrColl = new AttributeCollection(this.attrState);
}
return this.attrColl;
}
}
请注意以下事项:
因此,据我所知,如果我想使用AttributeCollection,我必须使用一个新的StateBag,它永远不会(不采用像反射这样的技巧)实际正确地管理状态.
我错过了什么吗?
我正在编写一个服务器控件,它是一个带有建议的搜索框(当用户开始输入时,将显示匹配的单词供他们选择).我正在使用jquery和C#.
当我在我正在测试的页面上包含jquery Lib时,控件工作正常.但是,当我尝试将lib嵌入DLL时,它将无法工作.
我试过完全嵌入它并注册脚本:
ClientScriptManager manager = this.Page.ClientScript;
manager.RegisterClientScriptResource(typeof(Search), jqueryResource); //jqueryResource= SearchControl.javascript.jquery.js
Run Code Online (Sandbox Code Playgroud)
我也尝试在包含jquery的页面标题中添加一个标记:
string javascriptUrl = manager.GetWebResourceUrl(typeof(Search), jqueryResource);
LiteralControl jquery = new LiteralControl(string.Format(javascriptInclude, jqueryUrl));
Page.Header.Controls.Add(jquery);
Run Code Online (Sandbox Code Playgroud)
尝试从控件获取信息时,这两种方式都会导致javascript错误(Object Expected)
var params = $("#searchBox").val(); //called on keyup when typing in textbox
Run Code Online (Sandbox Code Playgroud)
有人曾经这样做过吗?可能吗?有人可以对此有所了解吗?
PS:程序集已在AssemblyInfo.cs文件中注册.
"ASP.NET AJAX服务器控件"和"ASP.NET服务器控件"项目类型有什么区别?
一种项目类型是否优于另一种?
是否有一些事情可以在一个而不是另一个中完成?
提前致谢.
编辑:我发现此链接:http://www.codeproject.com/Articles/22384/ASP-NET-AJAX-Controls-and-Extenders
这是该链接的引用,我认为它回答了我的问题:
乍一看,似乎ASP.NET服务器控件与其他两个控件的不同之处在于它不支持AJAX.但是,这并不完全正确,在本教程的第一部分中,我将演示基于单独的服务器控件开发支持AJAX的控件的进度.虽然ASP.NET服务器控件不提供对AJAX脚本的直接访问,但它可以实现封装在其他控件(如UpdatePanel或AJAX Extensions Timer Control)中的AJAX脚本,以提供AJAX功能.对于那些并不热衷于深入研究JavaScript的复杂性和陷阱的控件开发人员来说,Server Control提供了一个优秀而干净的开发路径.
AJAX服务器控件和AJAX服务器控件扩展器与常规ASP.NET服务器控件的不同之处在于它们与JavaScript文件耦合,并允许控件类的属性和JavaScript类的属性之间的映射.如果您需要其他AJAX Server控件未提供的功能,或者只是想使用客户端脚本自定义控件以避免ASP.NET控件生命周期,那么这是最佳选择.
编辑2:我刚看到Aghilas Yakoub的答案有相同的链接:)
asp.net ×8
viewstate ×4
.net ×2
c# ×2
postback ×2
asynchronous ×1
javascript ×1
jquery ×1
obout ×1
updatepanel ×1