小编Mar*_*ell的帖子

查找DOM节点索引

我想找到给定DOM节点的索引.这就像做的反过来

document.getElementById('id_of_element').childNodes[K]
Run Code Online (Sandbox Code Playgroud)

我想提取K给定的值,我已经有了对子节点和父节点的引用.我该怎么做呢?

javascript dom

59
推荐指数
3
解决办法
5万
查看次数

为什么我的隐藏输入写入:value ="value"而不是true/false?

我有一个MVC4站点,(作为隐藏表单的一部分):

<input name="somefield" type="hidden" value="@ViewBag.Test"/>
Run Code Online (Sandbox Code Playgroud)

价值ViewBag.Testtrue.表单字段将发布到表单的输入参数:

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)

但是,我知道这曾经奏效.发生了什么事,我该怎么办?

asp.net asp.net-mvc-4

57
推荐指数
1
解决办法
9844
查看次数

为什么零长度的 stackalloc 会让 C# 编译器乐于允许有条件的 stackallocs?

下面的“修复”让我很困惑;这里的场景是根据大小有条件地决定是使用堆栈还是租用缓冲区 - 这是一个非常利基但有时必要的优化,但是:使用“明显”的实现(数字 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号= …

c# stackalloc

50
推荐指数
2
解决办法
3524
查看次数

自定义集合初始化器

可以像以下示例中那样初始化实现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()重载之外的函数吗?

c#

48
推荐指数
1
解决办法
1万
查看次数

使用twitter-bootstrap下载表单

我的TopBar中有一个Dropdown,使用Twitter Bootstrap CSS框架构建.

我有3个问题,我找不到任何解决方案:

  1. 文本和密码输入字段太大,我该如何调整它们?使下拉框更大也没关系.
  2. 田地的标签太暗了,我怎么能把它们点亮一点?
  3. 当我点击其中一个字段时,Dropdown正在关闭.我必须重新打开它,然后我可以键入,直到单击下一个字段.即使关闭下拉列表,也会保留这些值.我怎样才能保持开放状态?

以下是问题1和2的屏幕截图:

我的问题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="&#x2713;" /><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)

html5 css3 twitter-bootstrap drop-down-menu

46
推荐指数
5
解决办法
7万
查看次数

IIS是否执行非法字符替换?如果是这样,如何阻止它?

上下文:在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.您将立即将第一个和最后一个识别为我们的百分比编码字符串的开头和结尾...那么中间发生了什么?

好:

  • 代码点0x93是()
  • 代码点0x201c是()

它在我看来非常像IIS在处理我的网址时执行了某种报价翻译.现在也许这可能在一些场景中使用(我不知道),但当它发生在%-encoded的UTF-8块中间时肯定是一件坏事.

请注意,这HttpContext.Current.Request.Raw 表明已经发生了这种翻译,所以这看起来不像是一个MVC错误; 还要注意Darin的评论,强调它在url的路径vs查询部分中的工作方式不同.

所以(两人):

  1. 我的分析是否缺少unicode/url处理的一些重要细节?
  2. 我如何解决它?(即使它成为我收到预期的角色)

asp.net iis unicode url asp.net-mvc

44
推荐指数
2
解决办法
2912
查看次数

将整数转换为仅在运行时已知的盒装枚举类型

想象一下,我们有一个枚举:

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.GetValuesType.GetFields),但这很难[Flags],甚至没有要求首先返回底层类型(谢天谢地,这并不难).

但; 是否更直接从正确的底层类型的值获取到枚举类型的框,其中类型仅在运行时已知?

.net c# reflection enums

42
推荐指数
2
解决办法
8119
查看次数

EntitySet - 是否有一个理所当然的IList.Add没有设置分配?

向大多数列表添加项目有3种方法...

  • 通常通过直接的公共API方法 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个多小时跟踪代码以隔离发生的事情.所以... …

.net c# linq entityset linq-to-sql

40
推荐指数
2
解决办法
3188
查看次数

部分类中的"文本顺序"是否正式定义?

具体而言,关于字段初始值设定项(在本例中为静态) - 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# constructor

40
推荐指数
2
解决办法
1281
查看次数

匿名类型与动态类型

c#3.0中的匿名类型(var)和c#4.0中的动态类型(动态)之间的真正区别是什么?

.net c# dynamic anonymous-types

39
推荐指数
5
解决办法
2万
查看次数