小编Lim*_*ing的帖子

Razor MVC,在哪里放置可在主页,partiview和view中访问的全局变量?

你好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,但是

  1. 我不喜欢使用ViewBag.我更喜欢强类型的对象
  2. 如果我对视图使用强类型对象("MyUser"),那么我必须使用具有"MyUser"属性的所有模型.感觉有点脏?因为我喜欢保持我的模型清洁,并且特定于他们所涉及的视图.此外,它会不必要地重复.
  3. 在master_layout.cshtml或partialviews等地方,如果我将它们放在控制器中,你如何访问"MyUser"?
  4. 使用RenderAction并为每个User属性构建partialview是一种矫枉过正的做法?

谢谢.再说一遍,我是MVC 4的新手,任何建议都非常感激.

razor asp.net-mvc-4

14
推荐指数
1
解决办法
1万
查看次数

Git Workflow最佳实践

愚蠢的问题,并把我当作版本控制的新手.

我是Git的新手(之前我曾经使用过subversion,但只是基础知识)我理解Git及其分支命令的基础知识,我有一个想象的情况,需要你的建议.

假设我的软件目前处于v1.2,稳定并已发布.

My Software
       v1.0
       v1.1
       v1.1.1
       v1.2 <- Current, Compilable and Released

场景:

我有两个开发人员,John和Eric.

  • John负责客户报告的错误修复.
  • Eric负责新功能,试验它们并解决问题.

现在是1月份.

John正在根据v1.2版本开发许多错误修复程序.每天他都需要将代码提交回存储库(GitHub),软件可能无法根据其状态进行编译.

Eric正在尝试这个新的wiki功能,从添加WYSIWYG编辑器等基本功能到差异/版本控制等高级功能,再次,他需要将代码提交回存储库,软件可能无法编译,具体取决于他所处的位置.

目标

  1. 在任何时候,我都可以推出一个稳定的,可编译的v1.2版本
  2. 2月,我希望v1.3被推出所有John的错误修复,并且取决于Eric是否完成(至少已完成基本功能),同时发布它.

有了GIT,工作流程是什么?

如果我正确理解GIT,那么Eric和John都应该创建自己的分支,并且在2月,让它们合并与主人合作的东西?

谢谢

tags git version-control branch

13
推荐指数
1
解决办法
6975
查看次数

有人可以通过亚马逊网络服务详细阐述这些托管的基本概念吗?

我阅读了整本亚马逊的文件,但我仍然感到困惑,或者我应该说不同的条款不堪重负.

我来自传统的网络托管环境,我理解的唯一概念是我拥有多少存储空间以及我允许的带宽量.

以下是我迄今为止对亚马逊以及我对其中很多问题的理解.

EC2 - 我假设我可以设置我的网络服务器(IIS)并运行我的.NET应用程序的实例?或者它已经为我设置了?

EBS - 对于数据库?如果没有,我从哪里获得数据库服务器?是否已安装数据库服务器(Sql server 2005或2008)?什么是快照获取请求?和快照投放请求?

S3 - 这是用来做什么的?我认为EBS是用于存储的,在这里很困惑.你为什么需要S3?

Elastic Load Balancing - 我认为负载平衡只是减轻Web服务器负担的一种方法.它如何与亚马逊合作?"弹性"负载平衡是什么意思?

地区之间的数据传输 - 这意味着什么?以及如何控制数据传入和传出的区域?

我的要求如下

  1. 我需要一个IIS网络服务器来运行我的页面
  2. 我需要一个数据库服务器
  3. 我需要一个位置来存储我的文件(它可以在与#1相同的"服务器"上)吗?
  4. 我需要数据库和文件服务器始终可以恢复.(我听说我们需要将它存储到EBS中以避免丢失数据?)
  5. 如果一个Web服务器过载,执行速度慢,我需要它关闭到服务器场中的另一个服务器.
  6. 如果流量激增,那么我需要一种方法来增加CPU,内存等.很好地处理流量的能力(这是我假设的弹性的目的)

另外,我真的不明白"如果你没有运行你的实例,关闭它或者它将被收费"的概念.我将建立一个理想的网站,以保持全天候.在什么情况下,您有条件地将实例上升或下降?

[编辑]

您如何准确监控您的使用情况?所以你不会对几千美元感到惊讶?你可以戴上帽子吗?我读过一些故事,其中AWS用户对300美元的账单感到惊讶,或者当他们在亚马逊上没有多少托管,也没有任何流量密集型网站时.

对不起,我是"云"计算的完全新手.试图赶上这里.

非常感谢提前

amazon-s3 amazon-ec2 amazon-ebs amazon-web-services amazon-elb

11
推荐指数
2
解决办法
2507
查看次数

如何正确地将日期转换为UTC,然后将其转换回来?

我正在努力将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的回答很有意义.我对两件事感到困惑.

  1. UTC时间存储在数据库中意味着什么?
  2. 服务器的时间与应用程序用户的关系是什么?

我的应用程序可以被来自不同时区的用户使用,有些用户与服务器位于同一时区,有些则不是.有些旅行,所以即使它们与服务器位于同一时区,它们也可能一直落在不同的时区.我的应用程序允许他们选择他们所在的时区,并适当地反映时间.

最初,我只是从数据库中获取UTC时间并从中减去用户的时区偏移量.正如Mimo所说,这是错误的.原因可以在我上面的帖子中看到.

我最初的解决方案是立即获取服务器的时区偏移并使用它来加减速,这也是错误的.截至2013年7月10日,当时服务器的偏移量为-4.目前,在2014年2月,服务器时区偏移为-5.解决方案当然是使用.ToLocalTime()

在我深入研究Mimo关于如何使用TimeZone.ToLocalTime()的建议之前,我就采取了以下措施来暂时解决问题.

  1. 从数据库中获取UTC日期并转换为.ToLocalTime,这是服务器显示的内容.所以到服务器,7/10/2013 4:00:00 AM成为7/10/2013 12:00:00 AM.

  2. 获取服务器时区偏移量.目前显示-5,因为它在美国东海岸.

  3. 获取用户的时区偏移量.对于西海岸,用户现在选择-8.对于东海岸,用户现在选择-5.

  4. 获取用户时区和服务器时区之间的差异.西海岸是-3.东海岸是0.

  5. 从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.

.net c# asp.net datetime utc

11
推荐指数
2
解决办法
2万
查看次数

ASP.NET,IIS/CLR与同步和异步编程相关的线程和请求

我只想在这里澄清一些概念.如果有人愿意在这个问题上分享他们的专业知识,我们非常感激.

以下是我对IIS如何与线程相关的理解,如果我错了,请纠正我.

HTTP.sys将

据我了解,对于IIS 6.0(我现在将离开IIS 7.0),Web浏览器发出请求,获取HTTP.sys内核驱动程序,HTTP.sys将其移交给IIS 6.0的线程池(I/O线程?)这样自由了.

IIS 6.0线程/ ThreadPool

IIS 6.0的线程返回将其交给ASP.NET,后者将一个临时的HSE_STATUS_PENDING返回到IIS 6.0,从而释放IIS 6.0线程,然后将其转发到CLR线程.

CLR Thread/ThreadPool

当ASP.NET在CLR线程池中选择一个空闲线程时,它会执行该请求.如果没有可用的CLR线程,它将在应用程序级别队列中排队(性能不佳)

基于之前的理解,我的问题如下.

  1. 在同步模式下,这是否意味着每1个CLR线程有1个请求?

    *)如果是这样,可以在1个CPU上提供多少个CONCURRENT请求?或者我应该反过来问?如何在每个CPU上允许CLR线程?比如,允许50个CLR线程,这是否意味着它在任何给定时间限制为50个请求?困惑.

  2. 如果我将"processModle"配置中的"requestQueueLimit"设置为5000,那真的是什么意思?您可以在应用程序队列中排队5000个请求吗?这不是很糟糕吗?由于应用程序队列性能不佳,为什么要将它设置得如此之高?

  3. 如果您正在编程异步页面,那么它确实在上面的过程中从哪里开始获益?

  4. 我研究并看到默认情况下,IIS 6.0的线程池大小为256.5000并发请求到来时,由256处理的IIS 6.0线程,然后每256个线程,双手其关闭,而我猜CLR线程甚至默认情况下降低 这本身不是异步的吗?有点困惑.此外,瓶颈何时何地开始以同步模式出现?并在异步模式?(不确定我是否有任何意义,我只是感到困惑).

  5. 当IIS threadpool(所有256个)忙时会发生什么?

  6. 当所有CLR线程都忙时会发生什么?(我假设所有请求都在应用程序级别队列中排队)

  7. 当应用程序队列超过requestQueueLimit时会发生什么?

非常感谢您的阅读,非常感谢您在这方面的专业知识.

asp.net iis performance threadpool

9
推荐指数
1
解决办法
1742
查看次数

C#泛型,我做错了什么?

我是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)

一切都很好.

c# razor

7
推荐指数
1
解决办法
686
查看次数

.ToUniversalTime(),为什么它以这种方式工作?

我注意到.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)

.net c# asp.net utc

7
推荐指数
1
解决办法
4174
查看次数

如何在具有1000万条记录的表中快速选择列中具有2个值的行?

我有一个表(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)

sql performance

5
推荐指数
1
解决办法
977
查看次数

如何查询具有多个根和过滤的嵌套集模型

如何查询具有多个根的嵌套集模型,例如同一个表中的树?目前,我添加了一个名为"Root"的额外列,表示所有子树节点的根节点的ID,但是,我无法找出sql以正确的顺序检索它们

我指的是管理MySQL中的分层数据这篇文章.

通常,按顺序检索项目的查询是按左叶值的顺序,但是有多个根,你可以一个接一个地结束多个"left:1",这样就打破了树.

我目前正在使用完全与SQL无关的解决方案.我将它们重新安排在我的C#代码中,但我只是想知道是否有办法用SQL来实现它,这样可以节省我在Web服务器上花费的时间

最后一个问题.如果我有一个过滤器,它从树中过滤掉一些数据,你如何处理它?

  • 任务1(进行中)
    • 任务2(主动)
      • 任务3(主动)

如果过滤器要显示状态为"活动"的所有树,您会怎么做?

sql asp.net nested-sets

4
推荐指数
1
解决办法
2750
查看次数

替换所有出现和正则表达式

我正在尝试用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)

c# regex

3
推荐指数
1
解决办法
6172
查看次数