使用jQuery我张贴的阵列int
通过将阵列中的数据参数,像这样我的MVC 3应用程序:data: { myIntArray: myIntArray }
.在我的控制器中,接收操作具有参数int[] myIntArray
.
这在大多数情况下都很顺利,除非myIntArray
是空的.在请求中,我看到以下内容myIntArray=
(请注意"="后面没有空格).回到我的MVC 3控制器,这将转换为包含一个int
0 的数组.
在我看来,通过发布一个空数组,我在做一些非常错误的事情.我可以通过以不同的方式处理数组为空的情况来解决这个问题.不过,我觉得这应该是可能的.
提前致谢.
额外信息:
myIntArray
初始化为new Array()
.我试图从选择框通过jQuery选择选项标签(值为""的选项).我使用以下选择器:
$("[value='']");
Run Code Online (Sandbox Code Playgroud)
这适用于大多数浏览器,但在IE7中它会引发异常.如果我将它更改为以下(imho等效)选择器,那么它工作正常:
$(":not(:not([value='']))");
Run Code Online (Sandbox Code Playgroud)
我宁愿不使用后者,但不能想到更好的等同于前者.
jQuery版本:1.3.1.
例外:
微软JScript运行时错误:异常抛出没有捕获
上
if(S==null){throw"Syntax error, unrecognized expression: "+ab}
Run Code Online (Sandbox Code Playgroud)
哪里
ab = "value='']"
Run Code Online (Sandbox Code Playgroud)
为了确保我的其他代码没有引起问题,我在以下情况下重现了错误:
<html>
<head>
<script type="text/javascript" src="jquery-1.3.1.js"></script>
<script type="text/javascript">
$(document).ready(function(){
alert($("option[value='']").html());
});
</script>
</head>
<body>
<select>
<option value="">test</option>
<option value="1">test1</option>
<option value="2">test2</option>
</select>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
我在使用ViewBag时正在使用MVC 3.我想测试是否已分配ViewBag的其中一个属性.我知道在PHP中你可以做isset(变量),但在.NET 4中有类似的东西吗?
场景是我正在制作一个嵌套的布局,它通过ViewBag获取一个节标题和一个字幕副标题.它们由分隔符分隔,子标题是可选的.如果未设置子标题,我不想显示分隔符.
这就是我想象它将被.NET 4 equivelant取代的地方.
@section header
{
<h2>@ViewBag.SectionTitle</h2>
@if(isset(ViewBag.SectionSubTitle))
{
<div id="section-title-seperator"> - </div><h3>@ViewBag.SectionSubTitle</h3>
}
}
Run Code Online (Sandbox Code Playgroud)
在我的问题的直接答案旁边,我也对替代解决方案持开放态度(如果我滥用ViewBag).
提前致谢.
我正在阅读MCTS Self-Paced Training Kit(考试70-536):Microsoft .NET Framework-应用程序开发基础,第二版电子书.
现在我完成了线程章节(第7节).在第2课结束时的问题中,有一个问题(第2条)询问:"您正在编写一个可以由多个线程运行的方法.确保在任何线程正在读取时没有线程写入该文件从文件开始.但是你必须尽可能有效地完成多线程读取."
然后有两个答案是答案的答案:A.
lock(file)
{
// Read
}
Run Code Online (Sandbox Code Playgroud)
和
D.
ReaderWriterLock rwl = new ReaderWriterLock();
rwl.AcquireReaderLock(10000);
// Read
rwl.ReleaseReaderLock();
Run Code Online (Sandbox Code Playgroud)
问题中的微妙提示"它必须对多次读取有效"当然意味着他们希望你使用它ReaderWriterLock
,但后来我想:"创建一个ReaderWriterLock
你要锁定的方法内部的新实例应该不起作用,每次调用该方法都会锁定一个不同的实例ReaderWriterLock
."
然而在答案中它说:D.
所以恕我直言,这是书中的一个错误.它们可能在代码示例中意味着新实例将在其他地方创建.如果我在考试中得到这个问题,我会错的(我会选择A).
我正在做一个项目,在某个时刻我需要显示一个月的时间,这些天仍然可用。有一个功能可以计算哪些日期可用。我的同事说:“哦,我们知道,您应该返回a BitVector32
。这是使用布尔值列表时最有效的方法。” 我会用一个List<bool>
或类似的东西。BitVector32
在您实际使用位时,对我而言,A 似乎是低级内容。
所以,问题是。您是否应该BitVector32
在需要少于32个布尔值的布尔值列表时使用Every,还是仅将其用于低级内容?
早些时候我问过这个问题.答案导致了另一个问题,就像你在你面前所说的那样.
我的问题是,我有一个自定义的MembershipProvider
使用AccountRepository
使用ObjectContext
.因为它MembershipProvider
是一个Singleton
MVC(据我所知),AccountRepository
它ObjectContext
应该被注入一次,并在其余MembershipProvider
的生命时间内保持不变.
但是,在我的控制器中,我还使用具有对象上下文的存储库.在这些控制器中,我需要在存储库与请求之间共享对象上下文.我有以下绑定:
Bind<IMyContext>().To<MyObjectContext>().InRequestScope();
// put bindings here
Bind<IAccountRepository>().To<EFAccountRepository>
Run Code Online (Sandbox Code Playgroud)
并在 Application_Start()
kernel.Inject(Membership.Provider);
Run Code Online (Sandbox Code Playgroud)
问题是Ninject在认为请求完成时显然会调用对象上下文(我想30秒后).
我注意到,当您设置绑定时,您可以指定"何时注入".问题是,我需要"注入时注入".即注射时对象上下文到该帐户控制器注入时的帐户控制器到成员资格提供.我似乎没有...
MyMembershipProvider
在MVC中.只需将它的一个实例(后面和接口)传递给需要它的控制器,就像我使用存储库一样.然后Ninject将根据请求实例化提供程序.我不喜欢它,因为我确信MVC有理由将成员资格提供者实例化为单身人士.kernel.Inject
在每个事件中再次调用.每次请求重新初始化提供程序几乎等同于重新实例化,除了更脏.恕我直言,第一次解决方案是最好的.但是,我更愿意找到一种方法来将Ninject设置为以我想要的方式绑定.
我该怎么办?
在我的项目中,我目前在HTML中使用一些自定义data-*属性来传达jQuery将使用的一些额外数据.我发现了这个.data()
方法,并注意到如果我有一个data-*属性data-my-attribute
,我可以通过选择带有属性和调用的元素在jQuery中检索它的值.data("my-attribute")
.
我认为这是应该使用的方式(没有查看文档)并通过我的jQuery代码使用它.但是,现在我注意到当我"000005643"
在HTML data-*属性中添加一个字符串时,.data("my-attribute")
返回5643
时.attr("data-my-attribute")
返回"000005643"
.后者是我想要的.这导致我查阅文档,实际发现有.data()
比我想象的更多.此外,我从未看到任何表明您应该.data()
用来检索data-*属性值的文本或示例.这让我担心我做了一些根本错误的事情.
那么我是否应该停止并停止以.data()
这种方式使用?如果没有,您能否将我链接到有关.data()
解释此用途的功能的一些文档.
此代码无法编译:
public T Get<T>()
{
T result = default(T);
if(typeof(T) == typeof(int))
{
int i = 0;
result = (T)i;
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
但是,这段代码确实编译:
public T Get<T>()
{
T result = default(T);
if(typeof(T) == typeof(int))
{
int i = 0;
result = (T)(object)i;
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
代码也可以正常工作.我不明白为什么编译器可以将对象(实际类型可以是任何东西)强制转换为T,但是不能将int(从对象中转换为对象)转换为T.
我遇到了一个我遇到的问题:
return
isSomething() &&
isSomethingElse();
Run Code Online (Sandbox Code Playgroud)
这是行不通的,因为javascript在返回后插入分号,使得上面的等价于:
return;
isSomething() && isSomethingElse();
Run Code Online (Sandbox Code Playgroud)
这完全让我感到困惑,为什么会这样做.我发现了一些关于该主题的StackOverflow问题(例如this,this和this),但他们只是解释了"何时"这样做,参考规范.
我甚至无法想象我想要一个return;
声明后跟一些其他有效的javascript语句的情况(除非你使用goto
或者我可能没有听说过其他一些模糊的javascript).在我看来,这只会导致问题.
我想知道为什么会这样做.为什么这部分规范?
编辑:关于重复的结束.我想,我明确表示,我读其他的问题和答案,指出它是JavaScript的规范的一部分,甚至把区别于其他人在我的问题的一部分大胆.在密切原因中链接的问题不包含对这个问题的答案,并且与我在回答我的问题时所链接的其他三个问题的形式完全相同.
我知道我可以从强制转换的结果GetHttpCode()来HttpStatusCode,但我不喜欢类型转换枚举.特别是因为MSDN doc没有明确说明枚举的值总是精确对应的http状态代码.
我觉得GetHttpCode()应该只是返回HttpStatusCode.
我应该停止抱怨和强制转型吗?
catch(HttpException ex)
{
switch((HttpStatusCode)ex.GetHttpCode())
{
case HttpStatusCode.NotFound:
// Do stuff...
break;
// More cases...
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:请注意,HttpWebResponse.StatusCode 是类型HttpStatusCode