我见过有关Forms和UserControls的DesignMode属性的多篇帖子和问题.我们的想法是您要检查控件是否处于设计模式(例如,控件显示在Visual Studio Designer中),并避免只能在运行时运行的代码.我见过很多人遇到的问题 - 最近我的失败记忆也暴露了我 - 是DesignMode属性在构造函数中不起作用,并且不适用于嵌套控件.但是,它在您的控件或窗体的Load事件处理程序中运行得非常好!!
当你考虑它时,Forms或UserControls的构造函数中的代码应该只处理不需要加载表单的状态.处理UI对象初始化的代码应该位于控件的Load事件处理程序中.在该函数中,DesignMode属性可以工作.Designer会在当时使用其正确的值.
原则上,已调用InitializeComponent()方法,但实际上,当您在"设计"视图中显示控件时,Designer仅解析该函数,但它不会运行它.但是,Designer会运行嵌套控件的构造函数.如果您绝对需要在构造函数中放置初始化代码,请使用System.ComponentModel.LicenseManager类,它有一个名为UsageMode的静态属性,它接受DesignTime或RunTime的值.您可以完全信任控件的构造函数中的属性 - 但仅在构造函数中!
我忘记了我正在处理的应用程序中的一点点微妙之处.为了解决这个问题,我现在坚持所有需要额外初始化的控件和表单都必须为Load事件实现处理程序的模式.在那里,DesignMode属性工作正常,我在Designer中打开用户控件和表单时遇到了麻烦.
如果我有一个类层次结构,我有时会使该事件处理程序受到虚拟保护,并且我只在子类需要额外初始化时才覆盖它.
我想知道,如果有更好的方法,或者这个模式有什么臭(其他必须多次实现一个Load事件处理程序?)
我有一个包含一行子类的UIView UIView.子类已重写drawRect:并已设置 contentMode = UIViewContentModeRedraw.
当用户child views挤压并拉伸父容器时,挤压和拉伸.随着形状发生变化,我想drawRect反复调用以改变内容child views.到目前为止,我一直没有成功.这样做的正确方法是什么?
干杯,
道格
当我有一些id,比如
ids = [2,3,5]
Run Code Online (Sandbox Code Playgroud)
我表演
Comment.find(ids)
Run Code Online (Sandbox Code Playgroud)
一切正常.但是当存在不存在的id时,我会得到一个例外.当我获得与某些过滤器匹配的ID列表时,通常会发生这种情况
current_user.comments.find(ids)
Run Code Online (Sandbox Code Playgroud)
这次我可能有一个有效的评论ID,但不属于给定的用户,所以找不到它,我得到一个例外.
我试过了find(:all, ids),但它返回了所有记录.
我现在能做到的唯一方法是
current_user.comments.select { |c| ids.include?(c.id) }
Run Code Online (Sandbox Code Playgroud)
但在我看来,这似乎是超低效的解决方案.
有没有更好的方法在Array中选择ID而不会在不存在的记录上获得异常?
我对ASP.NET MVC缓存和授权感到困惑,并且急需一些澄清.
我的自制授权属性继承自AuthorizeAttribute.它的重写AuthorizeCore方法每次都会运行,即使我[OutputCache]在控制器操作上设置了一个属性.我明白那一部分.
现在,对我来说这个问题:现在当我实际执行输出缓存并且从缓存中提供页面时,每次AuthorizeCore都会失败.原因是当缓存请求时,httpContext.Session提供的AuthorizeCore是null!?这是一些简化的代码:
protected override bool AuthorizeCore(HttpContextBase httpContext) {
return (Session["userId"] != null)
}
Run Code Online (Sandbox Code Playgroud)
所以如果httpContext.Session是null,这显然每次都失败了.我需要访问会话,我还能如何检查请求是否被授权?这没有任何意义 - 如果这是它应该如何,那么我永远不能在ASP.NET MVC中使用缓存页面和身份验证.救命?
我想禁用UIPickerView在向上和向下滚动时生成的恼人点击.有没有办法做到这一点?我想为拾取器视图所依赖的每个项目播放短音.它被内置的声音破坏了.
我知道通过关闭iPhone/iPod设置中的键盘声音可以全局关闭拾音器声音.但有没有办法以编程方式执行此操作?
任何帮助都感激不尽!
谢谢
我正在调试特定于Safari的javascript问题,我无法将console.log输出到错误日志.这是Safari的一个记录功能(我使用的是4.0.3版本).但是,我的代码中的这些语句似乎被忽略了.有什么想法吗?我没有通过谷歌找到线索.
我正在编写一个在cscript.exe中运行的JScript程序.是否可以从脚本中运行commnad line命令.这真的会让工作变得简单,因为我可以运行某些命令而不是在jscript中编写更多代码来执行相同的操作.
例如:为了等待按键10秒,我可以立即使用超时命令
timeout /t 10
Run Code Online (Sandbox Code Playgroud)
在jscript中实现这意味着更多的工作.顺便说一句,我在Vista和WSH v5.7上
有任何想法吗?感谢名单!
我已经使用依赖注入模式实现了名为DefaultController的mvc基本控制器,以便能够构建测试用例.示例如下:
public class DefaultController : Controller
{
protected readonly ISessionHelper _sessionHelper;
string _thisUserOpenID;
protected IUsersRepository _UserRepository;
...
public DefaultController()
{ } //not for testing
public DefaultController(ISessionHelper session, IUserRepository repo)
{
_sessionHelper=session;
_UserRepository = repo;
}
}
Run Code Online (Sandbox Code Playgroud)
然后我使用这个控制器,homecontroller,usercontroller等我的控制器.
现在,构建一些测试用例我发现自己处于一种我不知道如何实际使用注入依赖模式的情况.
[TestMethod]
public void Welcome_Message_In_ViewData_Has_Coockie_User_Display_Name()
{
// Below I want to insert FakeRepositories using
//ISessionHelper and so on. but the constructor
//for homecontroller don't have it.
HomeController controller = new HomeController();
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
asp.net-mvc ×3
c# ×3
.net ×2
iphone ×2
javascript ×2
objective-c ×2
activerecord ×1
authorize ×1
cocoa-touch ×1
command ×1
command-line ×1
debugging ×1
find ×1
grails ×1
ios ×1
ipod-touch ×1
safari ×1
session ×1
uikit ×1
uiview ×1
webkit ×1
wsh ×1