尽管与WebForms合作多年,我仍然发现自己不时会对事件生命周期感到困惑.这不是一个需要解决的问题,因为希望能够更好地理解为什么事情按照他们的方式运作.
假设你有一个表格:
Default.aspx的:
<form>
<MyControls:UserControl1 runat="server">
</form>
Run Code Online (Sandbox Code Playgroud)
的UserControl1:ASCX:
<MyControls:UserControl2 runat="server">
Run Code Online (Sandbox Code Playgroud)
该OnInit事件发生顺序如下:
UserControl2_OnInit
UserControl1_OnInit
Default_OnInit
Run Code Online (Sandbox Code Playgroud)
这不仅仅是低音吗?Init代码不应该按照创建控件的顺序运行吗?在OnInit运行之前,父控件是否不能初始化子属性?也就是说,虽然您可以在标记中初始化子控件的属性,但是没有直接的方法让父控件能够动态设置可用于其OnInit事件的子控件的属性.
我最终做的是这样的事情:
override void UserControl2_OnInit()
{
NamingContainer.OnInit += new EvenHandler(UserControl1_ActualInit);
}
protected void UserControl2_ActualInit(..) {
// do actual init code here, which will occur before OnLoad but after it's parent
// OnInit
}
Run Code Online (Sandbox Code Playgroud)
所以这不是一个不可逾越的问题.我只是不明白为什么它首先是一个问题.
我意识到也许您可能希望能够在OnInit代码中初始化所有子控件.很好,你应该能够首先调用base.OnInit,而不是之后,你自己的初始化代码,这应该导致所有的子控件OnInit事件运行.但事件生命周期不起作用.Init事件不是递归链接的,它们似乎独立地运行父事件,而最里面的事件总是首先运行.但是,如果它们简单地以链接方式链接,那么生活会变得容易得多,所以你可以在任何特定情况下做之前调用基本事件(或不是).有什么我想念的东西会使这种看似违反直觉的情况变得可取甚至是必要的吗?
虽然类似于这个问题给了我LINQ的部分问题,但我遗漏了一些似乎必须明显的东西,以避免循环字典的最后一步.
我有一个字典,我想得到一个键的列表,只有值为true的项目.现在我这样做:
Dictionary<long,bool> ItemChecklist;
...
var selectedValues = ItemChecklist.Where(item => item.Value).ToList();
List<long> values = new List<long>();
foreach (KeyValuePair<long,bool> kvp in selectedValues) {
values.Add(kvp.Key);
}
Run Code Online (Sandbox Code Playgroud)
有没有办法我可以直接去一个List<long>没有做那个循环?
我希望能够通过名称将对任意函数的引用传递给另一个javascript函数.如果它只是一个全局函数,则没有问题:
function runFunction(funcName) {
window[funcName]();
}
Run Code Online (Sandbox Code Playgroud)
但是假设函数可以是任意对象的成员,例如:
object.property.somefunction = function() {
//
}
Run Code Online (Sandbox Code Playgroud)
runFunction("object.property.somefunction")不起作用.我知道我可以这样做:
window["object"]["property"]["somefunction"]()
因此,虽然可以编写代码来解析字符串并以这种方式找出heirarchy,这似乎工作:)所以我想知道是否有更好的方法来解决这个问题,除了使用 eval()
我正在尝试扩展ScriptManager以简化处理具有多个资源文件的资源(例如,多个脚本文件以及css).我们的目标是,我将能够在单个添加ScriptReference到Scripts并将其加载与该基准名称的多个资源.
我坚持的是,ScriptManager当使用不包含Page参数的静态方法时,你的基本知道如何处理这些东西?例如:
ScriptManager.ScriptResourceMapping.AddDefinition("someName", new
ScriptResourceDefinition { Path="/script/somescript.js"});
Run Code Online (Sandbox Code Playgroud)
这为(我猜)任何活动脚本管理器为您调用它时正在运行的页面添加了一个定义.但与旧式方法不同,就像RegisterClientScriptBlock没有传递标识页面的参数一样.但是这些东西必须存放在ScriptManager对象中,不是吗?那怎么知道呢?
我可以随时获得对活动的引用:
ScriptManager.GetCurrent(page);
但理想情况下,我会创建与微软完全相同的新方法.我无法弄清楚如何实现类似的东西
ScriptManager.ScriptResourceMapping.AddDefinition(string name,
ScriptResourceDefinition definition,
ResourceType type)
Run Code Online (Sandbox Code Playgroud)
这可以找出对象实例添加内容而无需添加Page参数.不知怎的,他们正在做...我怎么能?
这是一个非常普遍的问题,但我正在做的具体事情很简单,所以我要包含代码.当我在编译时不知道两种对象的类型时,如何检查两个对象之间的类型兼容性?
也就是说,我可以做的if (object is SomeType)时候SomeType是在编译时已知的类型名称.GetType()是不够的,因为它不适用于派生类型.基本上我想能够说,if (object.IsTypeOfOrIsDerivedFrom(someType))这个神奇方法的签名是什么IsTypeOfOrIsDerivedFrom(Type type)
这是上下文.
// Return all controls that are (or are derived from) any of a list of Types
public static IEnumerable<Control> FindControls(this Control control, IEnumerable<Type> types, bool recurse)
{
foreach (Control ctl in control.Controls)
{
/// How can I compare the base types of item & ctl?
if (types.Any(item=> .... ))
{
yield return (ctl);
}
if (recurse && ctl.Controls.Count > 0)
{
IEnumerable<Control> subCtl …Run Code Online (Sandbox Code Playgroud) 我使用$.get或加载一些HTML $.ajax.在Chrome和Firefox的调试器中,我可以看到html已正确加载:
>数据
"<html><head><title></title></head><body>
<div id="topdiv" style="display:none;width:880px; height:600px;"></div>
</body</html>"
Run Code Online (Sandbox Code Playgroud)
所以这是一串HTML.大.接下来我尝试使用jQuery来解析它:
$doc = $(data);
> $ doc
[<TextNode textContent="\n\n">,
title,
<TextNode textContent="\n\n\n">,
div#topdiv,
<TextNode textContent="\n \n">]
Run Code Online (Sandbox Code Playgroud)
哇,什么?在哪里html,head,body去了?好吧,无论如何,我关心的只是div
$div = $data.find('div');
> $ div
[]
咦?
好.div是空的.经过进一步的实验,我意识到jQuery基本上忽略了任何顶级标签.然后它实际上不允许你选择任何第二级标签,所以如果有一个div嵌套在外部div中,那么将被选中.但是......什么?
似乎jQuery对那些"TextNode"元素有点窒息,奇怪的是,它创建了自己(而不是html,body).所以我编写了一些代码,通过遍历元素并直接提取非文本节点来解决这个问题:
function getNodes($doc) {
var result = new Array();
for (var i = 0; i < $doc.length; i++) {
if ($doc[i].hasOwnProperty("tagName")) {
result.push($doc[i]);
}
}
return $(result);
}
Run Code Online (Sandbox Code Playgroud)
工作得很好!在Chrome上.
在Firefox中尝试过,没有任何效果.
事实证明,并非Firefox中的每个对象都有一个hasOwnProperty功能.什么??好.所以重写到这个:
typeof($tempHtml[i].tagName) !== 'undefined' …
我有代码:
<div id="parent">
<div id="firstchild" style="display:none">
<div id="secondchild">
<div id="thirdchild" style="display:none">
</div>
Run Code Online (Sandbox Code Playgroud)
所以我想要做的是在jquery中找到未隐藏的元素,即.secondchild.
我猜我应该使用以下方面的东西:隐藏但我实际上想要反过来找到非隐藏的东西.
谁会知道怎么做?要查找作为父项子项的可见div并使其隐藏?
是否可以使用坐标计算图像映射上每个多边形区域的宽度和高度?
我有一个图像,并使用多个不同大小的多边形图像映射.我需要找到每个中心点.
我有一个类,我想通过创建它的静态实例作为单例使用.当然,我也希望它是线程安全的.
假设我没有共享任何私人数据.但是如果我没有弄错的话,仍然存在这样的问题:当调用静态对象实例的方法时,方法中的变量在线程之间共享,并且会产生不可预测的结果.
但是,在调用真正的静态方法时,会创建一个新的堆栈帧,因此无论如何它都是线程安全的(自身).如果我没有弄错的话.
单身人士的这种模式是否是线程安全的?
class Singleton
{
public object SomeMethod(object arg) {
return Singleton.SomeMethodImpl(arg);
}
private static object SomeMethodImpl(object arg) {
// is in unique stack frame?
object Result;
...
return Result;
}
}
Run Code Online (Sandbox Code Playgroud)
如果你想知道我为什么不首先创建一个静态类 - 我需要一个基于接口的单例,并且具有不同的实现,作为策略模式的一部分.这不适用于静态类.
嗨我在C#领域很新.自今年年初开始使用php和JavaScript.我想从博客中删除帖子和评论.该网站是http://www.somewhereinblog.net
我想要做的是1.我想使用软件登录2.然后下载html 3.然后使用正则表达式,xpath任何方便分离帖子和评论的内容
我一直在寻找.理解得很少.虽然我很确定我需要使用'htmlagilitypack'.我不知道如何将库添加到c#控制台或表单应用程序.有人可以给我一些帮助吗?我非常需要这个.而且我不会在一周内进入C#.如果有一些详细的信息,将不胜感激.急切地等待.
先谢谢兄弟们.
当我尝试在 Firefox 中运行我的代码时出现此错误。它在 IE 中工作正常。实际上我试图通过定义图像映射来实现图像的翻转效果
<map name="planetmap">
<area class="a1" shape="rect" coords="420,120,380,100" alt="Ring" href="#"/>
<area class="a2" shape="rect" coords="300,330,400,250" alt="Ring" href="#"/>
<area class="a3" shape="rect" coords="610,190,580,270" alt="Ring" href="#"/>
<area class="a4" shape="rect" coords="450,250,550,400" alt="Ring" href="#"/>
</map>
Run Code Online (Sandbox Code Playgroud)
当我将鼠标悬停在图像上时,请帮助我解决此问题,但 Firefox 中没有打开任何内容。
尝试在Visual Studio 2010中使用MVC RC4 Web API设置新站点,它似乎不起作用:参数值永远不会传递给方法.
据我所知,我完全按照此处的描述完成了所有工作:http://www.asp.net/web-api/overview/web-api-routing-and-actions/routing-in-aspnet-web-api
路线配置:
routes.Clear();
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new {
id = RouteParameter.Optional
}
);
Run Code Online (Sandbox Code Playgroud)
下面是常规的MVC路线,我也试过完全删除它以查看是否存在一些冲突,但它没有任何区别.
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new {
controller = "Home",
action = "Index",
id = UrlParameter.Optional
}
);
Run Code Online (Sandbox Code Playgroud)
测试控制器:
public class TestController : ApiController
{
[HttpGet]
public int Double(int value)
{
return value * 2;
}
}
Run Code Online (Sandbox Code Playgroud)
网址: http://localhost:1505/api/test/double/4
The parameters dictionary contains a null entry for parameter 'value' of
non-nullable type …Run Code Online (Sandbox Code Playgroud)