Tag: asp.net mvc 3

如何避免使用会员提供商?

我们目前正在为瘦客户端簿记应用程序构建架构。 它应遵循两个主要要求: 应用程序应具有模块设计。 每个模块都可以拥有(并且实际上拥有)自己的角色系统。 以后的应用程序应适合在不同的机器上使用不同的数据库运行。 我们认为Asp.NET MVC 3是适合这项任务的平台。 为了管理应用程序数据,我们选择了最新版本的Entity Framework – 它的批量数据提供程序和Code Firstfunction可以为我们节省大量时间。 我们纠结的部分是用户/角色管理系统。 我们应该有一些全局管理部分用于添加用户并授予他们模块访问权限(只有全局管理员可以将用户添加到系统,不支持“街头人”注册)并且每个模块都有自己的管理部分和自己的管理员和角色。 我们已经有了数据模型以适当的方式存储我们需要的所有内容,但不知道如何从应用程序正确访问这些数据。 目前,我们看到两种可能的方法来解决此问题: 根据我们的DAL编写自定义成员资格和角色提供程序。 我们团队中没有人这样做过,所以我们不确定这种方式是否值得。 会员提供商不能提供与应用程序需求一样多的灵活性,因此需要一些紧急情况。 挖掘一些过时的书籍,了解在创建成员资格提供者之前如何组织网站管理系统。 这两种方式都不优雅,对我们来说并不明显,而且选择哪种方式也不是一个简单的问题。 我们也相信它可以是其他解决方案(因为架构可能会受到影响)。 因此,我们很高兴看到任何与此问题相关的建议。

如何使用Log4Net在日志文件中获取当前用户名而不是AppPool标识

我们正在使用ASP.NET MVC3应用程序中的Log4Net,一切正常但我们希望在日志文件中看到当前用户名而不是应用程序池的标识,这是我们使用的appender配置: true 所以看起来像属性: %username正在检索值: WindowsIdentity.GetCurrent().Name 而不是我们需要的: HttpContext.Current.User 如何在web.config中轻松解决这个问题,而无需创建自定义属性或其他log4net派生类? 如果可能的话,如果定制属性是我们可以忍受的唯一方式,我猜:)谢谢!

如何隐藏miniprofiler?

我正在使用MVC Mini分析器来检查我的应用程序的特定部分的速度,并希望将其保留在那里以防万一发生以后的事情,我可能需要检查“出了什么问题”。 它不是一个完整的日志集,但它非常方便地知道什么使页面花了很长时间。 因此,我的目标是隐藏它并仅在请求带有特定参数时才对其进行配置。 但是,我的尝试都没有像我期望的那样奏效。 这已经完成了不在屏幕上显示它的技巧(视图中的代码): @if (Request.QueryString.AllKeys.Contains(“showProfiler”)) { @MvcMiniProfiler.MiniProfiler.RenderIncludes() } 这是接近的尝试。 正确地隐藏迷你探查器信息,但是在我显示它的那一刻,它描述了自我停止显示它以来的所有内容。 所以,假设我描述了我的页面,需要3秒钟。 我删除了查询参数并再次加载页面三次。 我再次添加我的参数,我看到4组配置文件信息。 这意味着它会记录所有内容,我想知道它是否会给内存带来问题。 尝试不再发生这种情况: 尝试1: protected void Application_BeginRequest() { if (Request.QueryString.AllKeys.Contains(“showProfiler”)) { MiniProfiler.Start(); } } 尝试2: protected void Application_EndRequest() { MiniProfiler.Stop(!Request.QueryString.AllKeys.Contains(“showProfiler”)); } 尝试3: protected void Application_EndRequest() { MiniProfiler.Stop(true); } 这些都没有奏效。 有任何想法吗?

自动映射 – 忽略条件映射

我正在使用automapper,我想知道当该字段为空时是否可以忽略字段的映射。 那是我的代码: .ForMember(dest => dest.BusinessGroup_Id, opt => opt.MapFrom(src => (int)src.BusinessGroup)) src.BusinessGroup type = “enum” dest.BusinessGroup_Id = int 目标是,如果src.BusinessGroup = null,那就是映射。

无法将类型为“System.Web.HttpInputStream”的对象强制转换为“System.IO.FileStream”MVC 3

我遇到了关于从HttpInputStream到FileStream的转换类型的问题。 我怎么做的? 我有一个HttpPostedFileBase对象,我想拥有FileStream。 我写: public void Test(HttpPostedFileBase postedFile) { FileStream fileStream = (FileStream)(postedFile.InputStream); // throw exception FileStream anotherFileStream = postedFile.InputStream as FileStream; // null } 我也试过了 public void Test(HttpPostedFileBase postedFile) { Stream stream = postedFile.InputStream as Stream; FileStream myFile = (FileStream)stream; } 但没有成功。 为什么在postedFile.InputStream出现HttpInputStream类型? 我怎么能解决这个问题呢? 谢谢

是否可以使用包含元素的ActionLink?

正如问题所说,是否可以使用包含元素的ActionLink,如果没有,实现它的最佳方法是什么? 例如,假设我有一个Span元素,我想要整个东西是一个超链接…以下工作: Click anywhere in this box 想象一下,span / css类box5使这个大…原来是一个DIV,但是,我发现没有遵循标准,这似乎遵循确定。 这呈现并且工作正常,但是,无论如何使用ActionLink代替? 我试图猜测语法,如(从表单复制): @using (Html.Actionlink){Click anywhere in this box} 没有任何运气的许多其他组合。 现在,我的手动HTML解决方法工作正常,我很高兴离开它,但是,是否可以使用MVC ActionLink,如果是,我是否应该担心/是否会有任何好处?

NHibernateexception:事务未连接或已断开连接

在我们的开发环境中,所有ASP.NET应用程序都运行良好。 但是,当我在测试机器上部署站点时,在某些页面上我得到了以下exception: NHibernate.TransactionException: Transaction not connected, or was disconnected at NHibernate.Transaction.AdoTransaction.CheckNotZombied() in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Transaction\AdoTransaction.cs:line 406 at NHibernate.Transaction.AdoTransaction.Rollback() in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Transaction\AdoTransaction.cs:line 240 我不知道如何解决这个问题。 唯一的区别是数据库版本:开发:10.0.5500(2008 R2,SP1,Express)测试:10.0.5500(2008,SP3) 有人知道这里发生了什么吗?

什么相当于LINQ之间的比较字符串或lambda表达式之间的子句?

如何使用LINQ或Lambda Expression过滤两个字符串的查询间隔。 例: SELECT * FROM dbo.Country WHERE Name BETWEEN “Argentina” AND “Jamaica”;

生成传出URL时选择了意外的路由

请考虑以下路线: routes.MapRoute( “route1”, “{controller}/{month}-{year}/{action}/{user}” ); routes.MapRoute( “route2”, “{controller}/{month}-{year}/{action}” ); 以下测试: 测试1 [TestMethod] public void Test1() { RouteCollection routes = new RouteCollection(); MvcApplication.RegisterRoutes(routes); RequestContext context = new RequestContext(CreateHttpContext(), new RouteData()); DateTime now = DateTime.Now; string result; context.RouteData.Values.Add(“controller”, “Home”); context.RouteData.Values.Add(“action”, “Index”); context.RouteData.Values.Add(“user”, “user1”); result = UrlHelper.GenerateUrl(null, “Index”, null, new RouteValueDictionary( new { month = now.Month, year = […]

Linq-to-Entity查询的动态谓词

以下Linq-to-Entities查询工作正常: var query = repository.Where(r => r.YearProp1.HasValue && r.YearProp1 >= minYear && r.YearProp1 <= maxYear); 我的数据库有十几个列,它们都报告与年份相关的信息( short?数据类型)。 我想为所有这些列重用相同的Linq-to-Entities逻辑。 就像是: Func fx = GetYearPropertyFunction(); var query = repository.Where(r => fx(r).HasValue && fx(r) >= minYear && fx(r) <= maxYear); 这会导致错误: LINQ to Entities无法识别方法’System.Nullable`1 [System.Int16] fx(RepoEntity)’方法,并且此方法无法转换为商店表达式。 我理解为什么我收到错误,但我想知道是否有一个解决方法,不涉及重复代码十几次只是为了更改SQL查询运行的属性。 我会在多个查询中重用该函数,所以我想我的问题的一般版本是: 有没有办法将简单的property-getter lambda函数转换为Linq-to-Entities可以使用的Expression?