你好Razor MVC大师:
新手问题.
背景.我有一个自定义IIdentity,它在进入控制器和视图之前在HttpModule中设置.要使用它,我必须这样做
MyIdentity myIdentity = (MyIdentity)((GenericPrincipal)context.User).Identity;
MyComplexUser user = myIdentity.User;
//user.name //user.location //user.username //etc
Run Code Online (Sandbox Code Playgroud)
问题是,我在不同的地方使用对象如
它实际上取决于视图所需的"MyComplexUser"对象的属性.
目前,在视图中,我必须做这个非常复杂的铸造才能到达一个属性.例如,如果我想要用户的"名称",我需要这样做
@(((MyComplexUser)(((MyIdentity)((的GenericPrincipal)context.User).Identity).用户)).名称)
我想我可以把它放在控制器中,然后使用ViewBag.MyUser属性填充ViewBag,但是
谢谢.再说一遍,我是MVC 4的新手,任何建议都非常感激.
愚蠢的问题,并把我当作版本控制的新手.
我是Git的新手(之前我曾经使用过subversion,但只是基础知识)我理解Git及其分支命令的基础知识,我有一个想象的情况,需要你的建议.
假设我的软件目前处于v1.2,稳定并已发布.
My Software v1.0 v1.1 v1.1.1 v1.2 <- Current, Compilable and Released
我有两个开发人员,John和Eric.
现在是1月份.
John正在根据v1.2版本开发许多错误修复程序.每天他都需要将代码提交回存储库(GitHub),软件可能无法根据其状态进行编译.
Eric正在尝试这个新的wiki功能,从添加WYSIWYG编辑器等基本功能到差异/版本控制等高级功能,再次,他需要将代码提交回存储库,软件可能无法编译,具体取决于他所处的位置.
有了GIT,工作流程是什么?
如果我正确理解GIT,那么Eric和John都应该创建自己的分支,并且在2月,让它们合并与主人合作的东西?
谢谢
我阅读了整本亚马逊的文件,但我仍然感到困惑,或者我应该说不同的条款不堪重负.
我来自传统的网络托管环境,我理解的唯一概念是我拥有多少存储空间以及我允许的带宽量.
以下是我迄今为止对亚马逊以及我对其中很多问题的理解.
EC2 - 我假设我可以设置我的网络服务器(IIS)并运行我的.NET应用程序的实例?或者它已经为我设置了?
EBS - 对于数据库?如果没有,我从哪里获得数据库服务器?是否已安装数据库服务器(Sql server 2005或2008)?什么是快照获取请求?和快照投放请求?
S3 - 这是用来做什么的?我认为EBS是用于存储的,在这里很困惑.你为什么需要S3?
Elastic Load Balancing - 我认为负载平衡只是减轻Web服务器负担的一种方法.它如何与亚马逊合作?"弹性"负载平衡是什么意思?
地区之间的数据传输 - 这意味着什么?以及如何控制数据传入和传出的区域?
我的要求如下
另外,我真的不明白"如果你没有运行你的实例,关闭它或者它将被收费"的概念.我将建立一个理想的网站,以保持全天候.在什么情况下,您有条件地将实例上升或下降?
[编辑]
您如何准确监控您的使用情况?所以你不会对几千美元感到惊讶?你可以戴上帽子吗?我读过一些故事,其中AWS用户对300美元的账单感到惊讶,或者当他们在亚马逊上没有多少托管,也没有任何流量密集型网站时.
对不起,我是"云"计算的完全新手.试图赶上这里.
非常感谢提前
amazon-s3 amazon-ec2 amazon-ebs amazon-web-services amazon-elb
我正在努力将DateTime转换为UTC,这个概念以及所有我无法正确理解的东西.
当我得到一个日期时间字符串,比如说"7/10/2013",我就是这样做的
Convert.ToDateTime("7/10/2013").ToUniversalTime();
Run Code Online (Sandbox Code Playgroud)
这将在数据库中将其记录为"7/10/2013 4:00:00 AM ".服务器位于美国东海岸(-5).当然,在2013年7月期间,DST仍然被观察到,因此在此期间的偏移为-4,这样额外的4小时4:00:00 AM "记录为UTC.
当我写这篇文章时,它是2014年2月,DST没有生效,所以现在偏移是-5.在我的应用程序中,这是我在我的应用程序中选择的偏移量.
如果我申请-5偏移"7/ 10 /2013 上午4点零零分00秒 ",日期将是将"七/ 09 /2013 下午11时00分00秒 ".
哪一天是错的,有一天关闭.
问题#1
那么如何才能正确转换UTC时间呢?这意味着,当用户现在在2014年2月加载我的应用程序时(目前时区偏移为-5),7/10/2013 4:00:00 AM应该仍然是2013年7月10日,而不是2013年9月7日.
令我困惑的是,因为.ToUniversalTime()考虑了服务器DST,是否存在一个硬盘"通用时间",它不受服务器所在位置的影响?
问题2
当我在西海岸和东海岸都有服务器,写入数据库时会发生什么?如果记录的UTC时间是基于东海岸还是西海岸,应用程序如何判断?
基本上,代码怎么说,"7/10/2013 4:00:00 AM"是在东海岸创建的UTC时间(表示美国东海岸的7/10/2013 00:00:00 AM)和不是西海岸的服务器(这表明它是美国西海岸的7/09/2013 20:00:00 pm)?
对不起,如果这听起来很愚蠢.任何建议都表示赞赏.
==========最终编辑,我目前的解决方案===============
MiMo的回答很有意义.我对两件事感到困惑.
我的应用程序可以被来自不同时区的用户使用,有些用户与服务器位于同一时区,有些则不是.有些旅行,所以即使它们与服务器位于同一时区,它们也可能一直落在不同的时区.我的应用程序允许他们选择他们所在的时区,并适当地反映时间.
最初,我只是从数据库中获取UTC时间并从中减去用户的时区偏移量.正如Mimo所说,这是错误的.原因可以在我上面的帖子中看到.
我最初的解决方案是立即获取服务器的时区偏移并使用它来加减速,这也是错误的.截至2013年7月10日,当时服务器的偏移量为-4.目前,在2014年2月,服务器时区偏移为-5.解决方案当然是使用.ToLocalTime()
在我深入研究Mimo关于如何使用TimeZone.ToLocalTime()的建议之前,我就采取了以下措施来暂时解决问题.
从数据库中获取UTC日期并转换为.ToLocalTime,这是服务器显示的内容.所以到服务器,7/10/2013 4:00:00 AM成为7/10/2013 12:00:00 AM.
获取服务器时区偏移量.目前显示-5,因为它在美国东海岸.
获取用户的时区偏移量.对于西海岸,用户现在选择-8.对于东海岸,用户现在选择-5.
获取用户时区和服务器时区之间的差异.西海岸是-3.东海岸是0.
从7/10/2013 12:00:00 AM减去差异,因此西海岸的截止日期为7/09/2013 21:00:00 PM,东海岸的截止日期为7/10/2013 12:00:00 AM.
全对了.
非常感谢你们.现在是时候深入了解TimeZone.ToLocalTime()并看看我是否可以减少步骤2-5.
我只想在这里澄清一些概念.如果有人愿意在这个问题上分享他们的专业知识,我们非常感激.
以下是我对IIS如何与线程相关的理解,如果我错了,请纠正我.
据我了解,对于IIS 6.0(我现在将离开IIS 7.0),Web浏览器发出请求,获取HTTP.sys内核驱动程序,HTTP.sys将其移交给IIS 6.0的线程池(I/O线程?)这样自由了.
IIS 6.0的线程返回将其交给ASP.NET,后者将一个临时的HSE_STATUS_PENDING返回到IIS 6.0,从而释放IIS 6.0线程,然后将其转发到CLR线程.
当ASP.NET在CLR线程池中选择一个空闲线程时,它会执行该请求.如果没有可用的CLR线程,它将在应用程序级别队列中排队(性能不佳)
基于之前的理解,我的问题如下.
在同步模式下,这是否意味着每1个CLR线程有1个请求?
*)如果是这样,可以在1个CPU上提供多少个CONCURRENT请求?或者我应该反过来问?如何在每个CPU上允许CLR线程?比如,允许50个CLR线程,这是否意味着它在任何给定时间限制为50个请求?困惑.
如果我将"processModle"配置中的"requestQueueLimit"设置为5000,那真的是什么意思?您可以在应用程序队列中排队5000个请求吗?这不是很糟糕吗?由于应用程序队列性能不佳,为什么要将它设置得如此之高?
如果您正在编程异步页面,那么它确实在上面的过程中从哪里开始获益?
我研究并看到默认情况下,IIS 6.0的线程池大小为256.5000并发请求到来时,由256处理的IIS 6.0线程,然后每256个线程,双手其关闭,而我猜CLR线程甚至默认情况下降低 这本身不是异步的吗?有点困惑.此外,瓶颈何时何地开始以同步模式出现?并在异步模式?(不确定我是否有任何意义,我只是感到困惑).
当IIS threadpool(所有256个)忙时会发生什么?
当所有CLR线程都忙时会发生什么?(我假设所有请求都在应用程序级别队列中排队)
当应用程序队列超过requestQueueLimit时会发生什么?
非常感谢您的阅读,非常感谢您在这方面的专业知识.
我是Generics的新手,我无法弄清楚为什么以下不起作用.
我有一个扩展名IEnumerable<T>
,称为Grid,它看起来像这样
public static class IEnumberableGridExtension
{
public static HelperResult Grid<T>(this IEnumerable<T> gridItems, Action<GridView<T>> thegrid)
{
........
}
}
Run Code Online (Sandbox Code Playgroud)
说,我的剃刀模型中有一个名为"Products"的变量,它是类型List<Product>
,所以我试着这样做
@Model.Products.Grid<Product>(grid=>{
...
});
Run Code Online (Sandbox Code Playgroud)
它声明"无法将方法组'Grid'转换为非委托类型'对象'.你打算调用这个方法吗?",用"@ Model.tasks.Grid"红色加下划线.
有趣的是,视觉工作室编译,一切都很好.当然,如果我只是这样做
@Model.Products.Grid(grid=>{
...
});
Run Code Online (Sandbox Code Playgroud)
一切都很好.
我注意到.ToUniversalTime()这个奇怪的问题,但我无法弄清楚为什么.
如果我做
DateTime currentServerTime = System.DateTime.Now;
DateTime currentUTCServerTime = currentServerTime.ToUniversalTime();
log.Debug("Current server time :" + currentServerTime);
log.Debug("Current Server UTC Time is :" + currentUTCServerTime);
Run Code Online (Sandbox Code Playgroud)
结果
Current server time :2/18/2014 2:09:23 PM
Current Server UTC Time is :2/18/2014 7:09:23 PM
Run Code Online (Sandbox Code Playgroud)
相隔5个小时.
鉴于服务器位于美国东海岸,具有-5偏移量.那是对的.
现在,如果我这样做
String dateTimeString = "7/10/2013";
DateTime baseLined = Convert.ToDateTime(dateTimeString);
DateTime convertedUTCTime = baseLined.ToUniversalTime();
log.Debug(dateTimeString + " is :"+baseLined);
log.Debug(dateTimeString + " UTC time is :" + convertedUTCTime);
Run Code Online (Sandbox Code Playgroud)
结果
7/10/2013 is : 7/10/2013 12:00:00 AM
7/10/2013 UTC time is: 7/10/2013 …
Run Code Online (Sandbox Code Playgroud) 我有一个表(TestFI),例如以下数据
FIID Email
---------
null a@a.com
1 a@a.com
null b@b.com
2 b@b.com
3 c@c.com
4 c@c.com
5 c@c.com
null d@d.com
null d@d.com
Run Code Online (Sandbox Code Playgroud)
我需要两次出现的记录,并且FIID的1行是空的,而其中一行不是.对于上述数据,只有"a@a.com和b@b.com"符合要求.
我能够像这样构建一个多级查询
Select
FIID,
Email
from
TestFI
where
Email in
(
Select
Email
from
(
Select
Email
from
TestFI
where
Email in
(
select
Email
from
TestFI
where
FIID is null or FIID is not null
group by Email
having
count(Email) = 2
)
and
FIID is null
)as Temp1
group by Email
having count(Email) = 1
) …
Run Code Online (Sandbox Code Playgroud) 如何查询具有多个根的嵌套集模型,例如同一个表中的树?目前,我添加了一个名为"Root"的额外列,表示所有子树节点的根节点的ID,但是,我无法找出sql以正确的顺序检索它们
我指的是管理MySQL中的分层数据这篇文章.
通常,按顺序检索项目的查询是按左叶值的顺序,但是有多个根,你可以一个接一个地结束多个"left:1",这样就打破了树.
我目前正在使用完全与SQL无关的解决方案.我将它们重新安排在我的C#代码中,但我只是想知道是否有办法用SQL来实现它,这样可以节省我在Web服务器上花费的时间
最后一个问题.如果我有一个过滤器,它从树中过滤掉一些数据,你如何处理它?
说
如果过滤器要显示状态为"活动"的所有树,您会怎么做?
我正在尝试用HTML标记替换两个连续的换行符<p/>
.所以在一个字符串中,例如:
\r\n\r\n\r\n
Run Code Online (Sandbox Code Playgroud)
有两次连续出现\r\n\r\n
,
结果应该是:
<p/><p/>
Run Code Online (Sandbox Code Playgroud)
但是使用C#String.Replace
,它只会检测到第一次出现而我才会回来:
<p/>\r\n
Run Code Online (Sandbox Code Playgroud)
所以我想知道是否有正则表达式大师知道如何使用正则表达式检测它?
编辑:
我认为这个问题有点令人困惑.让我重新说一下.要求应该是只有在"\r\n"
标记之前<p/>
有另一个"\ r \n"时才用标记替换any .
这样的字符串:
\r\n\r\n\r\n
Run Code Online (Sandbox Code Playgroud)
\r\n
,\r\n
在它之前没有另一个,没有什么应该做,\r\n
,它\r\n
之前有另一个,有资格替换,\r\n
,它\r\n
之前确实有另一个,也有资格替换.所以结果应该是:
<p/><p/>
Run Code Online (Sandbox Code Playgroud) asp.net ×4
c# ×4
.net ×2
performance ×2
razor ×2
sql ×2
utc ×2
amazon-ebs ×1
amazon-ec2 ×1
amazon-elb ×1
amazon-s3 ×1
branch ×1
datetime ×1
git ×1
iis ×1
nested-sets ×1
regex ×1
tags ×1
threadpool ×1