我想找到给定DOM节点的索引.这就像做的反过来
document.getElementById('id_of_element').childNodes[K]
Run Code Online (Sandbox Code Playgroud)
我想提取K给定的值,我已经有了对子节点和父节点的引用.我该怎么做呢?
我有一个MVC4站点,(作为隐藏表单的一部分):
<input name="somefield" type="hidden" value="@ViewBag.Test"/>
Run Code Online (Sandbox Code Playgroud)
价值ViewBag.Test是true.表单字段将发布到表单的输入参数:
public ActionResult SomeAction(bool somefield = false, ...)
Run Code Online (Sandbox Code Playgroud)
但somefield总是如此false.经过调查,我发现源代码有:
<input name="somefield" type="hidden" value="value"/>
Run Code Online (Sandbox Code Playgroud)
但是,我知道这曾经奏效.发生了什么事,我该怎么办?
下面的“修复”让我很困惑;这里的场景是根据大小有条件地决定是使用堆栈还是租用缓冲区 - 这是一个非常利基但有时必要的优化,但是:使用“明显”的实现(数字 3,推迟明确的分配,直到我们真正想要分配它),编译器抱怨 CS8353:
不能在此上下文中使用类型为“Span<int>”的 stackalloc 表达式的结果,因为它可能会暴露在包含方法之外
简短的再现(完整的再现如下)是:
// take your pick of:
// Span<int> s = stackalloc[0]; // works
// Span<int> s = default; // fails
// Span<int> s; // fails
if (condition)
{ // CS8353 happens here
s = stackalloc int[size];
}
else
{
s = // some other expression
}
// use s here
Run Code Online (Sandbox Code Playgroud)
我在这里唯一能想到的是,编译器确实在标记stackalloc正在逃避发生的上下文stackalloc,并且挥舞着一个标志说“我无法证明这在方法后面是否安全” ,但是通过stackalloc[0]在开始时使用 ,我们将“危险”上下文范围推得更高,现在编译器很高兴它永远不会逃脱“危险”范围(即它从未真正离开方法,因为我们声明在顶部范围)。这种理解是否正确,就可以证明的内容而言,这只是编译器的限制?
什么是真正有趣的(对我)是,= stackalloc[0]是根本无操作无论如何,这意味着至少在编译的形式工作1号= …
可以像以下示例中那样初始化实现IEnumerable和提供public void Add(/* args */)函数的类:
List<int> numbers = new List<int>{ 1, 2, 3 };
Run Code Online (Sandbox Code Playgroud)
Add(int)在初始化之后调用函数3x List<int>.
有没有办法明确地为我自己的类定义这种行为?例如,我可以让初始化程序调用除适当的Add()重载之外的函数吗?
我的TopBar中有一个Dropdown,使用Twitter Bootstrap CSS框架构建.
我有3个问题,我找不到任何解决方案:
以下是问题1和2的屏幕截图:

此处还有TopBar的HTML,就像现在一样.
<div class='topbar-wrapper'>
<div class='topbar'>
<div class='topbar-inner'>
<div class='container'>
<h3>
<a href="/">Webworld</a>
</h3>
<ul class='nav'>
<li>FILLER...</li>
</ul>
<ul class='nav secondary-nav'>
<li class='dropdown' data-dropdown='dropdown'>
<a href="#" class="dropdown-toggle">Login</a>
<div class='dropdown-menu' id='signin-dropdown'>
<form accept-charset="UTF-8" action="/sessions" method="post"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="✓" /><input name="authenticity_token" type="hidden" value="4L/A2ZMYkhTD3IiNDMTuB/fhPRvyCNGEsaZocUUpw40=" /></div>
<fieldset class='textbox'>
<label id='js-username'>
<span>Username</span>
<input autocomplete="on" id="username" name="username" type="text" />
</label>
<label id='password'>
<span>Passwort</span>
<input id="userpassword" name="userpassword" type="password" />
</label>
</fieldset>
<fieldset class='subchk'>
<input name="commit" type="submit" value="Log In" /> …Run Code Online (Sandbox Code Playgroud) 上下文:在IIS中运行的ASP.NET MVC,带有UTF-8%编码的URL.
使用标准项目模板和类似的测试操作HomeController:
public ActionResult Test(string id)
{
return Content(id, "text/plain");
}
Run Code Online (Sandbox Code Playgroud)
这适用于大多数%编码的UTF-8路由,例如:
http://mydevserver/Home/Test/%e4%ba%ac%e9%83%bd%e5%bc%81
Run Code Online (Sandbox Code Playgroud)
与京都expected的预期结果
但是使用路线:
http://mydevserver/Home/Test/%ee%93%bb
Run Code Online (Sandbox Code Playgroud)
网址未正确收到.
旁白:%ee%93%bb是%编码的代码点0xE4FB; 基本 - 多语种平面,私人使用区域; 但最终 - 一个有效的unicode代码点; 你可以手动验证,或通过:
string value = ((char) 0xE4FB).ToString();
string encoded = HttpUtility.UrlEncode(value); // %ee%93%bb
Run Code Online (Sandbox Code Playgroud)
现在,接下来发生的事情取决于Web服务器; 在Visual Studio开发服务器(也称为cassini)上,id接收到正确的字符串 - 长度为1的字符串,包含代码点0xE4FB.
但是,如果我在IIS或IIS Express中执行此操作,我会得到一个不同的id,特别 "î“»"是代码点:0xEE,0x201C,0xBB.您将立即将第一个和最后一个识别为我们的百分比编码字符串的开头和结尾...那么中间发生了什么?
好:
它在我看来非常像IIS在处理我的网址时执行了某种报价翻译.现在也许这可能在一些场景中使用(我不知道),但当它发生在%-encoded的UTF-8块中间时肯定是一件坏事.
请注意,这HttpContext.Current.Request.Raw 也表明已经发生了这种翻译,所以这看起来不像是一个MVC错误; 还要注意Darin的评论,强调它在url的路径vs查询部分中的工作方式不同.
所以(两人):
想象一下,我们有一个枚举:
enum Foo { A=1,B=2,C=3 }
Run Code Online (Sandbox Code Playgroud)
如果在编译时已知类型,则可以使用直接强制转换来在枚举类型和基础类型之间进行更改(通常int):
static int GetValue() { return 2; }
...
Foo foo = (Foo)GetValue(); // becomes Foo.B
Run Code Online (Sandbox Code Playgroud)
而拳击这给了一个类型的框Foo:
object o1 = foo;
Console.WriteLine(o1.GetType().Name); // writes Foo
Run Code Online (Sandbox Code Playgroud)
(事实上,你可以Foo打包和取消打包int,或int打包和取消打开Foo非常愉快)
然而(问题); 如果枚举类型仅在运行时已知,那么事情就更棘手了.把它装成一个显然是微不足道的int- 但是我可以把它装箱Foo吗?(理想情况下,不使用泛型MakeGenericMethod,这将是丑陋的).Convert.ChangeType抛出一个例外.ToString并且Enum.Parse工作,但是非常低效.
我可以查看定义的值(Enum.GetValues或Type.GetFields),但这很难[Flags],甚至没有要求首先返回底层类型(谢天谢地,这并不难).
但; 是否更直接从正确的底层类型的值获取到枚举类型的框,其中类型仅在运行时已知?
向大多数列表添加项目有3种方法...
Add(SomeType)IList<T>.Add(T)接口IList.Add(object)接口方法你通常期望他们的行为或多或少相同.然而,LINQ EntitySet<T>是......在3.5和4.0上都很奇怪; 该IListAPI 不会标志设定为"分配" -其他两种机制做 -这听起来微不足道,但它是因为它极大地影响系列化重要(即导致其跳过)的样板代码.
例:
EntitySet<string> set1 = new EntitySet<string>();
set1.Add("abc");
Debug.Assert(set1.Count == 1); // pass
Debug.Assert(set1.HasLoadedOrAssignedValues, "direct"); // pass
EntitySet<string> set2 = new EntitySet<string>();
IList<string> typedList = set2;
typedList.Add("abc");
Debug.Assert(set2.Count == 1); // pass
Debug.Assert(set2.HasLoadedOrAssignedValues, "typed list"); // pass
EntitySet<string> set3 = new EntitySet<string>();
IList untypedList = set3;
untypedList.Add("abc");
Debug.Assert(set3.Count == 1); // pass
Debug.Assert(set3.HasLoadedOrAssignedValues, "untyped list"); // FAIL
Run Code Online (Sandbox Code Playgroud)
现在......这让我感到非常惊讶; 以至于我花了2个多小时跟踪代码以隔离发生的事情.所以... …
具体而言,关于字段初始值设定项(在本例中为静态) - ECMA 334中的第17.11节:
如果一个类包含带有初始化程序的任何静态字段,那么这些初始化程序将在执行静态构造函数之前立即以文本顺序执行.
现在,如果我们partial在单独的文件中有多个类,那么该命令是否在任何地方确定?我的直觉说"没有正式定义,但可能与csproj中包含的顺序有关,或者与csc有关的顺序".它是否正确?
(是的,我意识到最好完全避免歧义 - 可能是通过将所有初始化移动到静态构造函数).
例如,如果我有a.cs:
using System;
partial class Program
{
private static int Foo = Write("Foo");
static int Write(string name)
{
Console.WriteLine(name);
return 0;
}
static void Main()
{
Console.WriteLine("[press any key]");
Console.ReadLine();
}
}
Run Code Online (Sandbox Code Playgroud)
并且b.cs:
partial class Program
{
private static int Bar = Write("Bar");
}
Run Code Online (Sandbox Code Playgroud)
和:
<Compile Include="a.cs" />
<Compile Include="b.cs" />
Run Code Online (Sandbox Code Playgroud)
那么这就是Foo然后Bar; 但是,如果是这样的话:
<Compile Include="b.cs" />
<Compile Include="a.cs" />
Run Code Online (Sandbox Code Playgroud)
那么它是Bar …
c#3.0中的匿名类型(var)和c#4.0中的动态类型(动态)之间的真正区别是什么?
c# ×6
.net ×3
asp.net ×2
asp.net-mvc ×1
constructor ×1
css3 ×1
dom ×1
dynamic ×1
entityset ×1
enums ×1
html5 ×1
iis ×1
javascript ×1
linq ×1
linq-to-sql ×1
reflection ×1
stackalloc ×1
unicode ×1
url ×1