Tag: asp.net mvc

你如何在Nhibernate中进行版本控制?

我无法相信让某人向我展示一个简单的工作示例是如此困难。 它让我相信每个人只能说他们知道如何去做,但实际上他们不会。 我将post简化为我想要的例子。 也许这篇文章很长,吓跑了人们。 为了得到这个赏金,我正在寻找一个可以在VS 2010中复制并运行的工作示例。 这个例子需要做什么。 显示我的域中的数据类型应该是mssql 2008中的时间戳版本 显示nhibernate自动抛出“StaleObjectException” 向我展示这3个场景的工作示例 情景1 用户A进入该站点并编辑Row1。 用户B来(注意他可以看到Row1)并点击编辑Row1,在用户A完成之前,UserB应该被拒绝编辑该行。 场景2 用户A进入该站点并编辑Row1。 用户B出现30分钟后点击编辑Row1。 用户B应该能够编辑此行并保存。 这是因为用户A花了太长时间来编辑行并失去了编辑权。 场景3 用户A回来了。 他点击了更新行按钮,他应该受到StaleObjectException的欢迎。 我正在使用asp.net mvc和流利的nhibernate。 寻找在这些中完成的例子。 我尝试了什么 我试图建立自己的但我不能让它抛出StaleObjectException也不能让版本号增加。 我累了打开2个单独的浏览器并加载了索引页面。 两个浏览器都显示相同的版本号。 public class Default1Controller : Controller { // // GET: /Default1/ public ActionResult Index() { var sessionFactory = CreateSessionFactory(); using (var session = sessionFactory.OpenSession()) { using (var […]

DataAnnotation与自定义ResourceProvider

我创建了一个自定义ResourceProvider来从数据库中提取本地化信息。 我现在想使用DataAnnotation为模型添加validation。 DataAnnotation具有ErrorMessageResourceType和ErrorMessageResourceName属性,但ErrorMessageResourceType仅接受System.Type (即已编译的资源文件) 有没有办法让DataAnnotation使用自定义ResourceProvider?

从表达式获取字符串属性名称

我正在尝试写一个强类型的帮助器,它是这样的: Html.Lookup(x => x.FooId); 现在我有这个: public static MvcHtmlString Lookup(this HtmlHelper html, Func expression) { // get string “FooId” here } 谁知道怎么弄这个?

MVCvalidation – 使用服务层保持干燥 – 最佳做法是什么?

我试图坚持最好的多层设计实践,并且不希望我的MVC控制器与我的DAL(或任何IRepository)进行交互。 它必须通过我的业务服务层来执行适当的业务规则和validation。 validation – 我不想在我的域模型实体上使用各种validation属性(例如[必需])在控制器中执行validation,因为这揭示了我的前端。 更不用说这项服务也可以通过WPF前端实现。 由于我的validation是在我的服务层完成的,将值返回给UI的最佳做法是什么? 我不想要’void addWhatever(int somethingsID)’,因为我需要知道它是否失败了。 它应该是一个布尔值吗? 它应该是枚举吗? 我应该利用exception处理吗? 或者我应该在将validation属性装饰到Model对象时返回一些类似于MVC使用的IValidationDictionary对象? (如果需要,我可以在UI中使用适配器模式) 我想将我的实体从控制器传递到服务层,并了解validation/数据持久性是否失败。 我也不想忽视这样一个事实:我需要返回一个视图,指出可能validation失败的每个字段的正确错误消息(我希望尽可能保持无痛)。 我有几个想法,所有这些想法都不对。 我觉得答案包括特定于视图的模型实体,但这会导致必须处理的整个映射问题,更不用说这违反了DRY(不要重复自己)原则。 什么是最佳做法?

JSON.net将C#对象序列化为JSON问题

我正在尝试使用JSON.net库将C#对象序列化为JSON。 我遇到的问题是正在创建的字符串中包含“。”。 下面是通过JsonConvert.SerializeObject返回的字符串: { "ComId": "AAAiB+AAHAALOaFAAL", "CovId": "AAABC9AAPAAAZYUAAI", "EffectiveDate": "\\/Date(1329368400000-0500)\\/", "ExpirationDate": "\\/Date(1360990800000-0500)\\/", "State": "TX", "DeductibleAmount": 500.0, "DeductibleType": "PD" } 通过JSONLint运行字符串返回: Parse error on line 1: { "ComId": & —–^ Expecting ‘STRING’, ‘}’ 下面是我尝试序列化为JSON的对象: public class CommonInfoModel { public virtual string ComId { get; set; } public virtual string CovId { get; set; } [Display(Name = […]

从Controller访问数据库实体

TL;博士 在一个很好的设计。 应该在单独的业务逻辑层(在asp.net MVC模型中)处理访问数据库,还是可以将IQueryable s或DbContext对象传递给控制器​​? 为什么? 各自的优点和缺点是什么? 我正在用C#构建一个ASP.NET MVC应用程序。 它使用EntityFramework作为ORM。 让我们稍微简化一下这个场景。 我有一个可爱的蓬松小猫数据库表。 每只小猫都有小猫图像链接,小猫蓬松指数,小猫名称和小猫ID。 这些映射到EF生成的名为Kitten POCO。 我可能会在其他项目中使用此类,而不仅仅是asp.net MVC项目。 我有一个KittenController应该在/Kittens取得最新的蓬松小猫。 它可能包含选择小猫的一些逻辑,但没有太多的逻辑。 我一直在和朋友争论如何实现这一点,我不会透露双方:) 选项1:控制器中的db: public ActionResult Kittens() // some parameters might be here { using(var db = new KittenEntities()){ // db can also be injected, var result = db.Kittens // this explicit query is here .Where(kitten=>kitten.fluffiness > 10) […]

我应该如何从MVC 6视图中访问我的ApplicationUser属性?

我正在开发一个ASP.Net vNext / MVC6项目。 我正在掌握ASP.Net Identity。 ApplicationUser类显然是我应该添加任何其他用户属性的地方,这适用于Entity Framework,我的其他属性按预期存储在数据库中。 但是,当我想从我的视图中访问当前登录用户的详细信息时,问题就出现了。 具体来说,我有一个_loginPartial.cshtml ,我想在其中检索并显示用户的Gravatar图标,我需要该电子邮件地址。 Razor View基类具有User属性,这是一个ClaimsPrincipal 。 如何从此User属性返回到我的ApplicationUser ,以检索我的自定义属性? 请注意,我不是在问如何查找信息; 我知道如何从User.GetUserId()值中查找ApplicationUser 。 这是一个关于如何合理地解决这个问题的问题。 具体来说,我不想: 从我的视图中执行任何类型的数据库查找(关注点分离) 必须为每个控制器添加逻辑以检索当前用户的详细信息(DRY原则) 必须为每个ViewModel添加User属性。 这似乎是一个“横切关注点”,应该有一个集中的标准解决方案,但我觉得我错过了一块拼图游戏。 从视图中获取这些自定义用户属性的最佳方法是什么? 注意:似乎MVC团队通过确保UserName属性始终设置为用户的电子邮件地址,在项目模板中侧面解决了这个问题,巧妙地避免了他们执行此查找以获取用户的电子邮件地址! 这对我来说似乎有点欺骗,在我的解决方案中,用户的登录名可能是也可能不是他们的电子邮件地址,所以我不能依赖这个技巧(我怀疑还有其他属性我需要稍后访问)。

ASP.NET MVC:在不影响性能的情况下路由自定义slug

我想在我的CMS中为页面创建自定义slug,因此用户可以创建自己的SEO-urls(如Wordpress)。 我以前通过“滥用”404路由在Ruby on Rails和PHP框架中执行此操作。 无法找到请求的控制器时调用此路由,使我能够将用户路由到我的动态页面控制器以解析slug(如果没有找到页面,我将其重定向到真正的404)。 这样,仅查询数据库以检查所请求的段塞。 但是,在MVC中,只有当路由不符合/{controller}/{action}/{id}的默认路由时,才会调用catch-all路由。 为了仍然能够解析自定义slugs我修改了RouteConfig.cs文件: public class RouteConfig { public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute(“{resource}.axd/{*pathInfo}”); routes.MapHttpRoute( name: “DefaultApi”, routeTemplate: “api/{controller}/{id}”, defaults: new { id = RouteParameter.Optional } ); RegisterCustomRoutes(routes); routes.MapRoute( name: “Default”, url: “{controller}/{action}/{id}”, defaults: new { Controller = “Pages”, Action = “Index”, id = UrlParameter.Optional } ); } public static […]

asp.net MVC RC1 RenderPartial ViewDataDictionary

我正在尝试使用ViewData将ViewData对象从母版页传递给视图用户控件。 问题是ViewDataDictionary没有在我尝试它的方式中返回视图用户控件中的任何值。 下面的示例代码仅使用匿名对象进行演示,尽管此方法或传递ViewData对象都ViewData 。 以下是我正在尝试使用的RenderPartial辅助方法: 并在我看来用户控制我执行以下操作: 为什么这不会返回任何东西? 谢谢你的帮助。 编辑: 我能够毫无问题地传递和访问强类型模型。 这是我试图用来传递的ViewDataDictionary只说模型之外的一个值…

MVC 3压缩filter导致输出乱码

所以,我有一个名为CompressAttribute的自定义属性,它被设置为global.asax中的全局filter。 它使用reflection来检查当前操作方法的返回类型,如果它是“ViewResult”,它使用GZip或Deflate压缩输出。 它工作得很好,除非页面抛出500服务器错误。 如果遇到错误,而不是显示.NET错误页面,我得到一堆: `我%/米{JJT 显然它正在尝试编码导致问题的500 Server Error页面。 处理这个问题的最佳方法是什么? 这是filter代码: public override void OnActionExecuting(ActionExecutingContext filterContext) { MethodInfo actionMethodInfo = Common.GetActionMethodInfo(filterContext); if (GetReturnType(actionMethodInfo).ToLower() != “viewresult”) return; HttpRequestBase request = filterContext.HttpContext.Request; string acceptEncoding = request.Headers[“Accept-Encoding”]; if (string.IsNullOrEmpty(acceptEncoding)) return; acceptEncoding = acceptEncoding.ToUpperInvariant(); HttpResponseBase response = filterContext.HttpContext.Response; if (acceptEncoding.Contains(“GZIP”)) { response.AppendHeader(“Content-encoding”, “gzip”); response.Filter = new WebCompressionStream(response.Filter, CompressionType.GZip); } else […]