我即将在我公司的应用程序中启动一个相当Ajax的重要功能.我需要做的是每隔几分钟就让用户在页面上进行一次Ajax回调.
我很想知道的是,是否有任何干净简单的方法可以对ASP.NET页面进行JavaScript Ajax回调,而无需在页面上回发其余信息.如果可能的话,我不想这样做.
我真的只是希望能够在页面上调用单个方法,没有别的.
此外,我受限于ASP.NET 2.0,所以我不能使用任何新的3.5框架ASP AJAX功能,虽然我可以使用2.0 AJAX扩展的2.0框架.
更新
我决定接受DanP的回答,因为它似乎正是我正在寻找的.我们的网站已经使用jQuery来做某些事情,所以我可能会使用jQuery来发出请求,因为根据我的经验,它似乎比ASP的AJAX框架表现得更好.
您认为将数据传输到IHttpHandler的最佳方法是什么?我应该将变量添加到查询字符串中还是POST我需要发送的数据?
我认为我必须发送的唯一内容是单个ID,但我无法确定发送ID的最佳方法是什么,并让IHttpHandler处理它.我想提出一个解决方案,防止具有基本计算机技能的人意外或故意直接访问该页面或重复请求.这可能吗?
我的网站上有一个富文本编辑器,我正在尝试防范XSS攻击.我想我已经完成了所有处理,但我仍然不确定如何处理图像.现在我正在使用以下正则表达式验证图像URL,我假设它将阻止内联javascript XSS攻击:
"https?://[-A-Za-z0-9+&@#/%?=~_|!:,.;]+"
Run Code Online (Sandbox Code Playgroud)
我不确定的是,这让我对远程图像的XSS攻击有多开放.连接外部图像是否存在严重的安全威胁?
我唯一能想到的是输入的URL引用了一个资源,该资源返回" text/javascript
"作为其MIME类型而不是某种图像,然后执行javascript.
那可能吗?我应该考虑其他安全威胁吗?
1)用户在DropDownList中选择项目被认为是回发数据,因此DropDownList实现IPostbackDataHandler.
a)但是为什么用户移动(在Calendar控件中)到另一个月也没有被认为是回发数据?那么,为什么Calendar实现IPostbackEventHandler而不是IPostbackDataHandler呢?
2)
a)我假设实现IPostbackEventHandler而不是IPostbackDataHandler的控件永远不会收到回发数据?
b)如果控件实现了IPostbackDataHandler,那么每次数据更改时都会触发控件的回发事件,即使该控件没有引发回发
但是如果控件实现了IPostbackEventHandler,那么只有控件的回发事件会被引发的时间是该控件是否也触发了回发?
我发现了一个与此问题非常相似的问题,但使用了Oracle独有的功能.我希望在SQL Server中执行此操作.
我有这样一张桌子:
MyTable
--------------------
MyTableID INT PK
UserID INT
Counter INT
Run Code Online (Sandbox Code Playgroud)
每个用户可以有多行,Counter
每行有不同的值.我需要Counter
为每个用户找到具有最高值的行.
我该如何在SQL Server 2005中执行此操作?
我能想出的最好的是一个查询返回MAX(Counter)
每个UserID
,但我需要整行,因为这个表中的其他数据为了简单起见未在我的表定义中显示.
编辑:我从这篇文章的一些答案中引起了我的注意,我忘记了一个重要的细节.可以有2+行,其中UserID可以具有相同的MAX计数器值.下面的示例更新了预期的数据/输出应该是什么.
有了这些数据:
MyTableID UserID Counter
--------- ------- --------
1 1 4
2 1 7
3 4 3
4 11 9
5 11 3
6 4 6
...
9 11 9
Run Code Online (Sandbox Code Playgroud)
我想要重复MAX值的这些结果,选择SQL Server选择它们的任何顺序的第一次出现.在这种情况下返回哪些行并不重要,只要UserID/Counter对是不同的:
MyTableID UserID Counter
--------- ------- --------
2 1 7
4 11 9
6 4 6
Run Code Online (Sandbox Code Playgroud) 我有一个继承自我创建的抽象类的类的集合.我想使用抽象类作为工厂来创建抽象类的具体实现的实例.
有没有办法隐藏除父类之外的所有代码的构造函数.
我想基本上这样做
public abstract class AbstractClass
{
public static AbstractClass MakeAbstractClass(string args)
{
if (args == "a")
return new ConcreteClassA();
if (args == "b")
return new ConcreteClassB();
}
}
public class ConcreteClassA : AbstractClass
{
}
public class ConcreteClassB : AbstractClass
{
}
Run Code Online (Sandbox Code Playgroud)
但我想阻止任何人直接实例化2个具体的类.我想确保只有MakeAbstractClass()方法可以实例化基类.有没有办法做到这一点?
更新
我不需要从Abstract类外部访问ConcreteClassA或B的任何特定方法.我只需要Abstract类提供的公共方法.我并不真的需要防止被实例化的具体类,我只是想避免它,因为他们没有提供新的公共接口,只是不同的内部抽象类的一些非常具体的东西实现.
对我来说,最简单的解决方案是将子类作为samjudson提到.我想避免这种情况,因为它会使我的抽象类'文件比我想要的大得多.我宁愿将课程分成几个文件进行组织.
我想这没有简单的解决方案......
我有一个对象作为序列化的 base-64 字符串映射到 cookie。如果对存储在服务器端 cookie 中的对象进行了更改,我只想写出一个新的 cookie。
我想要做的是在从 cookie/初始化对象中提取对象时获取一个哈希码,并将原始哈希码与我将 cookie 标头发送给客户端之前存在的哈希码进行比较,以确保我没有除非进行了更改,否则重新序列化/发送 cookie。
我打算覆盖 .NET 的Object.GetHashCode()
方法,但我不确定这是检查对象是否被修改的最佳方法。
有没有其他方法可以检查对象是否被修改,或者我应该覆盖该GetHashCode()
方法。
更新我决定接受@rmbarnes 的回答,因为它有一个有趣的问题解决方案,并且因为我决定在他的帖子末尾使用他的建议而不检查修改。然而,我仍然有兴趣听到任何其他人可能对我的场景有任何其他解决方案。
更新: 我一直在试验我的控件,我想我已经接近了.请继续阅读以获取最新信息.
我有2个ASP.NET 2.0用户控件,其中之一被置于内部的另一个的.在内部控件内部,我有一个HtmlAnchor
标签控件,我正在尝试从外部控件设置URL.当我尝试HRef
从呈现页面的标记设置属性时,HtmlAnchor
控件是null
并抛出异常.
URL set
属性在内部或外部控件的OnInit事件之前和主页面的' '事件之前被调用OnPreInit
.我假设这是因为我在页面上的父控件的标记中设置子控件的URL我正在渲染控件,这意味着之前设置了值OnInit()
.这是我正在使用的代码的(精简版):
[ParseChildren(true)]// <- Setting this to false makes the
// page render without an exception
// but ignores anything in the markup.
[PersistChildren(false)]
public partial class OuterControl : System.Web.UI.UserControl
{
// The private '_Inner' control is declared
// in the .ascx markup of the control
[PersistenceMode(PersistenceMode.InnerProperty)]
public InnerControl Inner
{
get{ return _Inner; }
set{ _Inner = …
Run Code Online (Sandbox Code Playgroud) 我正在编写RenderContents()
ASP.NET服务器控件的方法.该方法使用HtmlTextWriter
对象来呈现输出内容.对于我正在编写的控件,使用这些HtmlTextWriter
方法似乎需要很多行代码来打开和关闭每个标记并将每个属性添加到流中.最后,我觉得我最终会得到比它需要的时间长得多的代码.
我在想,如果我使用了一个可链接的类StringBuilder
,我的代码会更清晰,更容易编写.
我想知道的是,有没有理由使用该HtmlTextWriter
对象来呈现我的整个控件的内容?除了安全检查(我假设),它包括确保您不以错误的顺序写标签或创建无效标记,我没有看到原因.
看起来像这样做会更容易:
protected override void RenderContents(HtmlTextWriter output)
{
StringBuilder s = new StringBuilder();
s.Append("lots")
.Append("of")
.Append("strings");
output.BeginRender();
output.Write(s.ToString());
output.EndRender();
}
Run Code Online (Sandbox Code Playgroud)
有什么理由说这是个坏主意吗?
更新
响应Mehrdad Afshari的回答:
我没有考虑StringBuilder
实例化单独对象的内存要求.如何为HtmlTextWriter创建一个包装器,以便它可以被链接,以便不会产生额外的字符串.
public class ChainedHtmlTextWriter
{
private HtmlTextWriter _W;
public ChainedHtmlTextWriter(HtmlTextWriter writer)
{
_W = writer;
}
public ChainedHtmlTextWriter Write<T>(T value)
{
_W.Write(value);
return this;
}
public ChainedHtmlTextWriter WriteLine<T>(T value)
{
_W.WriteLine(value);
return this;
}
}
Run Code Online (Sandbox Code Playgroud) asp.net stringbuilder servercontrols htmltextwriter method-chaining
我正在使用此处的HTML清理白名单代码:http:
//refactormycode.com/codes/333-sanitize-html
我需要添加"font"标记作为匹配的附加标记,因此我尝试在<img
标记检查 后添加此条件
if (tagname.StartsWith("<font"))
{
// detailed <font> tag checking
// Non-escaped expression (for testing in a Regex editor app)
// ^<font(\s*size="\d{1}")?(\s*color="((#[0-9a-f]{6})|(#[0-9a-f]{3})|red|green|blue|black|white)")?(\s*face="(Arial|Courier New|Garamond|Georgia|Tahoma|Verdana)")?\s*?>$
if (!IsMatch(tagname, @"<font
(\s*size=""\d{1}"")?
(\s*color=""((#[0-9a-f]{6})|(#[0-9a-f]{3})|red|green|blue|black|white)"")?
(\s*face=""(Arial|Courier New|Garamond|Georgia|Tahoma|Verdana)"")?
\s*?>"))
{
html = html.Remove(tag.Index, tag.Length);
}
}
Run Code Online (Sandbox Code Playgroud)
除了上面的条件,我的代码几乎与我链接到的页面中的代码相同.当我尝试在C#中测试它时,它会抛出一个异常说" Not enough )'s
".我已经多次计算了括号,我通过几个基于Javascript的在线正则表达式测试程序运行表达式,但它们似乎都没有告诉我任何问题.
我在我的正则表达式中遗漏了导致括号逃脱的内容吗?我需要做些什么来解决这个问题?
更新
经过大量的反复试验,我记得这个#
标志是正则表达式中的评论.解决这个问题的关键是逃避#
角色.万一其他人遇到同样的问题,我已经包括我的修复(只是逃避#
标志)
if (tagname.StartsWith("<font"))
{
// detailed <font> tag checking
// Non-escaped expression (for testing in a Regex editor app)
// ^<font(\s*size="\d{1}")?(\s*color="((#[0-9a-f]{6})|(#[0-9a-f]{3})|red|green|blue|black|white)")?(\s*face="(Arial|Courier New|Garamond|Georgia|Tahoma|Verdana)")?\s*?>$
if …
Run Code Online (Sandbox Code Playgroud) 如果我有这样的电话号码
string phone = "6365555796";
Run Code Online (Sandbox Code Playgroud)
我在数据库中只存储数字字符(作为字符串),是否可以输出如下数字:
"636-555-5796"
Run Code Online (Sandbox Code Playgroud)
类似于我使用数字时的情况:
long phone = 6365555796;
string output = phone.ToString("000-000-0000");
Run Code Online (Sandbox Code Playgroud)
我试过搜索,我在网上找到的只是数字格式文件.
我问的原因是因为我认为能够仅在数据库中存储数值并允许使用常量字符串值来指定我的电话号码格式的不同格式是一个有趣的想法.或者我最好使用一个数字吗?
编辑:问题是格式化包含数字的字符串,而不是数字本身.
c# ×6
.net ×5
asp.net ×4
ajax ×1
controls ×1
events ×1
formatting ×1
inheritance ×1
javascript ×1
oop ×1
postback ×1
regex ×1
security ×1
sql ×1
sql-server ×1
xss ×1