尽管浏览器覆盖正确检测到被覆盖的移动设备,但ASP.NET MVC 4中的移动显示模式在大约一小时的正常运行时间后停止提供正确的视图.
回收应用程序池暂时解决了这个问题.
新的浏览器覆盖功能正确地允许移动设备查看站点的桌面版本,反之亦然.但经过大约一个小时的正常运行时间后,移动设备不再呈现移动视图; 仅呈现默认桌面Razor模板.唯一的解决方法是回收应用程序池.
奇怪的是,浏览器覆盖cookie继续运行.主_Layout.cshtml模板正确显示"移动"或"桌面"文本,具体取决于值ViewContext.HttpContext.GetOverriddenBrowser().IsMobileDevice,但仍会呈现错误的视图.这让我相信问题在于DisplayModes.
有问题的行动没有被缓存:
[OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]
Run Code Online (Sandbox Code Playgroud)
我使用51Degrees进行移动检测,但我不认为这会影响被覆盖的移动检测.这是DisplayModesASP.NET MVC 4 Beta和开发人员预览的功能中的错误,还是我做错了什么?
这是我的DisplayModes设置Application_Start:
DisplayModeProvider.Instance.Modes.Insert(0, new DefaultDisplayMode("iPhone")
{
ContextCondition = context =>
context.GetOverriddenBrowser().IsMobileDevice
&& (context.Request.UserAgent.IndexOf("iPhone", StringComparison.OrdinalIgnoreCase) >= 0
|| context.Request.UserAgent.IndexOf("Android", StringComparison.OrdinalIgnoreCase) >= 0
|| !context.Request.Browser.IsMobileDevice)
});
/* Looks complicated, but renders Home.iPhone.cshtml if the overriding browser is
mobile or if the "real" browser is on an iPhone or Android. This falls through …Run Code Online (Sandbox Code Playgroud) 根据Anith Sen 应该避免的五个简单数据库设计错误,使用通用查找表来存储实体的可能状态是一个常见的错误.
编辑+答案: Anith文章中的数字没有很好的标注 - 我认为图1和图2都是糟糕设计的例子,而图2是好的设计.P,在那里担心了一会儿.
我将在下面提出我的问题以供参考.
"你失去了确保准确数据的手段;约束.通过将不同的实体组合到一个表中,你没有声明方法来约束某个类别的值."
限制价值如何失去准确性?"您必须将每种数据类型表示为具有此类通用查找表的字符串."
如果我想表示另一种数据类型,我可以在其查找表中添加一列."你致力于坚强和随后的复杂性."
怎么样?第四,也是最后,您面临着物理实现问题.
我不明白为什么.
我不同意给出的大多数理由,并希望对我的错误进行一些客观的批评?逻辑.
引用维修服务中的工作示例,其中包含许多可能具有自然流动的可能状态,让我们采取一个JobStatus表格:
可以说,这些状态中的一些可以标准化为表格Couriered Items,Completed Jobs并且Quotes(具有待定/接受/拒绝状态),但这感觉就像不必要的模式复杂化.
另一个常见示例是OrderStatus限制订单状态的表:
状态标题和描述在一个地方进行编辑,并且易于作为带有外键的下拉列表用于动态数据应用程序.这对我来说过去很有用.如果业务规则规定了新订单状态的创建,我可以将其添加到OrderStatus表中,而无需重建我的代码.
为什么这是一个不好的做法?
编辑:我在我的问题中加入了Anith的理由,并试图保持客观.
-
我有一个Invoices表是从与Job或相关联的库存创建的Order.我可以将一张Quotes桌子作为库存和发票之间的中间位置,但感觉我会有重复的数据结构和逻辑来处理"这是一个引用吗?" 位.
从商业角度来看,报价是从不同的发票:报价之前承诺发送和发送发票,一旦完成,付款到期,但如何在我的资料库和模型来表示这一点.
编辑:对于此特定实例,指示Job=== Order.
我使用Clickatell向客户的手机发送短信.
所有有效的手机号码都有标准化的正则表达式,例如+27 123 4567吗?我会自己动手,但我担心会错过一个模糊的,有效的电话号码格式.
使用可空的bool存储三态值是否有任何优点?例如,null == 1st state, false == 2nd state, true == 3rd state?
开销可能高于使用字节枚举,但我很好奇.
是否有一个像样的眼动追踪包替换鼠标进行代码编辑?
我想释放鼠标,但继续使用键盘编辑代码.
在做了一些研究之后,我得出结论,适当的眼动追踪硬件很昂贵.使用网络摄像头或高分辨率摄像机似乎是最可行的选择.
遗憾的是,基于图像的跟踪(与红外线跟踪相反)限制了准确性,因此并非所有功能都可行.
一个类似的问题建议Opengazer的摄像头,但我在加快基本的文本编辑特别感兴趣.任何建议都表示赞赏,特别是如果您有眼动追踪和实际使用案例的经验.
mouse usability typing human-computer-interface eye-tracking
当我设置ViewBag.Title在Razor模板的顶部时,将Model.Title使用值ViewBag.Title而不是期望值填充编辑器模板文本框Model.Title.Html.EditorFor(x => Model.Title)显式调用不会产生此行为.
如何在ViewBag.Title不维护模型的自定义编辑器模板的情况下阻止编辑器模板显示值?
@{
ViewBag.Title = "Edit Post " + Model.Title;
}
@Html.EditorFor(x => Model.Title) @* renders "My Title" text box *@
@Html.EditorFor(x => Model) @* renders "Edit Post My Title" text box *@
Run Code Online (Sandbox Code Playgroud) 我有一个困难的数据库设计决策,为我的客户基于网络的CRM的越来越多的分支机构提供多租户,我积极维护.
我很早就决定为每个分支使用单独的应用程序和单独的数据库,因为这是满足不同数据和代码要求的三个不同分支的最简单方法.我还想避免在每个查询中管理租户ID ,就像我在2007年建立的遗留经典ASP(cringe)应用程序一样......恐怖.
但现在分支机构的数据需求正在趋同,随着业务的扩展,我需要能够快速推出新的分支机构并共享全球产品SKU.
由于所有分支的表和视图都相同,并且现在可以使用更好的ORM工具来管理多租户应用程序,我想知道为多个分支创建共享数据库是否更好.
不太可能有多达10个分支机构.现在有3个.
在这方面具有实际经验的开发人员,您在我的情况下会做些什么?将应用程序和数据库分开,还是组合成一个巨大的系统?
编辑:伟大的微软的文章在多租户亲的利弊.我应该注意,分支之间的数据隔离不是主要问题.
sql-server asp.net database-design fluent-nhibernate multi-tenant
我在我的测试服务器上部署了一个ASP.NET MVC 4项目,但它似乎没有运行.
部署后尝试访问IIS 7上的项目URL会尝试列出目录内容.检查文件夹显示已部署所有程序集.启用目录浏览实际上列出了目录中的文件,并且可以提供静态文件.
就好像我的.NET 4.0应用程序池没有将任何请求路由到控制器.
可能是什么导致了这个?
asp.net-mvc ×3
sql-server ×2
asp.net ×1
boolean ×1
browser ×1
c# ×1
clickatell ×1
deployment ×1
eye-tracking ×1
invoice ×1
mobile ×1
mouse ×1
multi-tenant ×1
overriding ×1
phone-number ×1
quoting ×1
regex ×1
state ×1
typing ×1
usability ×1
validation ×1
viewbag ×1