我知道我想要做的是坏主意,但我现在有特定的约束.
我有多个站点,使用一个相同的MVC3代码库.对于其中一个,要求是从表单中隐藏一些必填字段.
我知道最好的方法是修改控制器来设置这些字段的默认值,但我想实现这个只修改这个特定站点的视图,而不用更改代码.
那么,如何在视图中将特定模型属性设置为默认值?理想应该是这样的:
@Html.HiddenFor(model => model.RequiredProperty)
@model.RequiredProperty = "default"
Run Code Online (Sandbox Code Playgroud)
编辑:更多解释
所以,实际上这是在子视图中,由2个不同的主视图使用.只有在使用一个特定的主视图时才需要设置这些属性,而不是其他主视图.
所以,我想默认设置需要转到特定的"主"视图.看起来我不能在子视图中使用HiddenFor,然后在主视图中使用Html.Hidden.
有没有办法检查子视图哪个是外视图?
我想知道为什么我不能在非泛型类中拥有泛型属性,就像我可以使用泛型方法一样.即:
public interface TestClass
{
IEnumerable<T> GetAllBy<T>(); //this works
IEnumerable<T> All<T> { get; } //this does not work
}
Run Code Online (Sandbox Code Playgroud)
我读了@Jon Skeet的回答,但这只是一个声明,很可能是规范中的某个地方.
我的问题是为什么它实际上是这样的?这种限制是否避免了一些问题?
我知道测试驱动开发的定义原则之一是你首先编写单元测试,然后编写代码来通过这些单元测试,但是有必要这样做吗?
我发现在我写这篇文章之前,我经常不知道自己在测试什么,主要是因为过去我参与过的几个项目都是从概念验证而不是设计而来的.
我之前尝试过编写单元测试,它可能很有用,但对我来说这似乎并不自然.
在C#中,如何从一系列值中获取一个随机数 - 如1..100,但该数字不应该在某些特定的值列表中,如5,7,17,23?
我需要在应用程序运行之间存储加密数据(很少的小字符串).我不希望用户每次启动应用程序时都提供密码.也就是说,它可以安全地存储加密密钥.
我正在研究RSACryptoServiceProvider并使用PersistentKeyInCsp,但我不确定它是如何工作的.密钥容器在应用程序运行或机器重启之间是否持久存在?如果是,是用户特定的还是特定于机器的.即如果我将加密数据存储在用户的漫游配置文件中,如果用户登录其他计算机,我可以解密数据吗?
如果以上不起作用,我有什么选择(我需要处理漫游配置文件).
在ASP.NET(2.0)应用程序中,我使用FormsAuthentication.
在Global.asax/Application_AuthenticateRequest方法中,我检查HttpContext.Current.User是否为null.
这是否足以知道表单身份验证cookie是否存在,故障单是否已过期,总体而言,表单身份验证机制是否已完成其工作以验证用户?
我需要这个,因为我在该应用程序中有某些页面,有时不需要访问身份验证(基于某些标准),我将它们放在web.config中的单独"location"指令中,以便将它们排除在外来自"catch all"表单身份验证.
即我正在尝试检查Application_AuthenticateRequest,如果在此"位置"访问的页面需要保护,如果是,则知道用户是否已经过身份验证,或者我需要重定向到登录.
编辑:正如答案所示,我很可能会选择IsAuthenticated.为了让我更好地掌握它,这里有2个奖金问题:)(请编辑其他答案添加这些,谢谢):
我可以假设,如果IsAuthenticated为true,那么HttpContext.Current.User肯定会包含经过身份验证的用户的用户名吗?
如果强制执行FormsAuthentication,我怎样才能在HttpContext.Current.User中找到"匿名用户",并且只有少数几个页面被"location"指令排除?
假设我有一张员工表,其中包含我公司每位员工的记录,以及一份主管专栏(如下所示).我想准备一份报告,其中列出了监管线中每个步骤的名称和标题.例如,对于迪克罗宾斯,1d#15,我想在他的"指挥系统"中列出每个主管,一直到总统,大奶酪.我想避免使用游标,但如果这是唯一的方法,那就没关系.
id fname lname title supervisorid
1 big cheese president 1
2 jim william vice president 1
3 sally carr vice president 1
4 ryan allan senior manager 2
5 mike miller manager 4
6 bill bryan manager 4
7 cathy maddy foreman 5
8 sean johnson senior mechanic 7
9 andrew koll senior mechanic 7
10 sarah ryans mechanic 8
11 dana bond mechanic 9
12 chris mcall technician 10
13 hannah ryans technician 10
14 matthew miller technician …Run Code Online (Sandbox Code Playgroud) 基于我的所有阅读,应该有一个GC线程来调用所有终结器.现在,问题是这个"一个"线程的范围是什么 - 每个进程或每个应用程序域,因为域的整个意图是在一个进程空间中分离并创建"独立"的不同应用程序.
我在这里读到:
如果在终结器中发生未处理的异常,则CLR的执行线程将吞下该异常,将终结器视为正常完成,将其从可释放队列中移除并移至下一个条目.
更严重的是,如果你的终结器由于某种原因没有退出会发生什么,例如它会阻塞,等待一个永远不会发生的情况.在这种情况下,终结器线程将被挂起,因此不再有可终结的对象将被垃圾收集.您应该非常了解这种情况,并坚持编写最简单的代码来释放终结器中的非托管资源.
另一个考虑因素是应用程序关闭期间发生 当程序关闭时,垃圾收集器将尽力调用所有可终结对象的终结器,但有一些限制:
在关闭期间,可终结对象不会升级到更高的堆生成.
任何单个终结器最多只能执行2秒; 如果它需要更长时间,它将被杀死.
所有终结器的执行时间最长为40秒; 如果任何终结器仍在执行,或者此时待决,整个过程将被突然终止.
太多帖子(甚至官方文档)滥用术语"应用程序","进程"和"应用程序域" - 他们中的大多数甚至假设它们是相同的,因为通常应用程序在单个进程中在单个应用程序域中运行.这种滥用使得所有这些文档难以阅读,甚至没有用处.
因此,我的问题假设多个应用程序,每个应用程序在单个进程中在单独的应用程序域中运行.
所有这些应用程序是否共享相同的GC和终结器线程?上面的文章中描述的问题(挂起终结器线程)是否会影响该进程中的所有应用程序?如果是 - 是否有解决方法(除了不使用不良应用程序),就像以某种方式发现终结器线程并发送它Thread.Abort?
以上都是因为我遇到了类似的问题.我的应用程序在单独的应用程序域中运行,作为第三方软件(Outlook)的插件.由于各种原因,我需要调用GC.Collect和GC.WaitForPendingFinalizers来完全释放COM引用(对于Office/Outlook,通常的互操作例程是不够的),当一个特定的其他第三方插件运行时,我的GC.WaitForPendingFinalizers将永远挂起,所以我怀疑第三方添加的"坏"终结器.我无法控制替换/删除添加(客户端的要求),因此我必须自己弄清楚如何使它们共存.
我有一张带时间戳的表.获取最后一小时每分钟记录计数的正确查询是什么.
即如果现在是2:25,我想知道有多少记录在1:25和1:26之间,1:26和1:27,依此类推,所以我有60个结果.
要在Moq中模拟受保护的虚拟(非泛型)方法很简单:
public class MyClass
{
....
protected virtual int MyMethod(Data data){..}
}
Run Code Online (Sandbox Code Playgroud)
并嘲笑它:
myMock.Protected().Setup<int>("MyMethod", ItExpr.Is<Data>( ...
Run Code Online (Sandbox Code Playgroud)
如果受保护的方法是通用的,我无法找到使用相同技术的方法,例如:
protected virtual int MyMethod<T>(T data)
Run Code Online (Sandbox Code Playgroud)
除了使用包装类来覆盖该方法之外,任何想法都是如此,我们非常感激.
c# ×4
.net ×2
sql-server ×2
.net-2.0 ×1
appdomain ×1
asp.net ×1
dns ×1
encryption ×1
finalizer ×1
model ×1
moq ×1
process ×1
random ×1
razor ×1
roaming ×1
setdefault ×1
sql ×1
tdd ×1
unit-testing ×1