Tag: asp.net mvc

从对象,entity framework自动创建数据库表

我正在尝试这个教程http://www.asp.net/mvc/tutorials/getting-started-with-aspnet-mvc3/getting-started-with-mvc3-part4-cs但不是使用紧凑版的SQL Server我在本地计算机上使用完整安装。 我阅读本教程的方式是entity framework假设从我定义的对象创建表。 我的问题是,当我运行项目时,我一直收到无效的对象名称dbo.movi​​es。 我终于通过自己创建表来运行它,所以我知道连接字符串,一切都是正确的。 我的问题是,是否可以从C#中创建的对象生成表格,如果是这样的话?

是否有使用POST而不是GET的MVC寻呼机?

这是我的问题。 我有一个SearchViewModel ,它有很多搜索条件,这些值根本不适合URL。 我目前正在使用Troy Goode’s Html.PagedListPager ,但它被设计为使用Url.Action()在URL中发送参数。 这是一个例子。 我不认为客户端过滤是一种选择,因为我会有很多记录。 @Html.PagedListPager( (IPagedList)@Model.SearchResults, page => Url.Action(“Results”, new { YearBuiltFrom = Model.YearBuiltFrom, } )) } 如果您只有一个或两个简单参数,这是一个很好的解决方案。 SearchViewModel public class SearchViewModel { public int? page { get; set; } public int? size { get; set; } [IgnoreDataMember] public IPagedList SearchResults { get; set; } public string[] Locations { get; […]

HttpStatusCodeResult(401)返回“302 Found”

使用ASP.NET MVC 5,我想为不同的场景返回适当的HTTP状态代码(401用户未经过身份validation,403当用户无权使用某些资源时等),而不是在jQuery中处理它们。 但问题是,当我尝试返回401时,它总是返回“302:Found”。 自定义状态代码的技巧是什么,以及为什么这不起作用? public ActionResult My() { if (User.Identity.IsAuthenticated == false) { return new HttpStatusCodeResult(401, “User is not authenticated.”); // Returns “302: Found” } // … other code … } 编辑1:有趣的位: 如果我用这样的404替换401: return new HttpNotFoundResult(“User is not authenticated.”); 然后它确实给出了一个404和jQuery可以捕获的问题。 然而,由于错误代码不同,它不是一个优雅的解决方案。 编辑2: 302对我不好,因为结果将在jQuery.get().fail() ,但302不会triger fail()

在迁移中更改数据Up方法 – entity framework

我在现有模型中添加了一个新属性。 它是一个bool属性,默认值为true。 此表中存在现有数据,我想在Up方法中创建新字段后立即将一个特定行的新属性设置为false。 public override void Up() { AddColumn(“dbo.RequestValidationErrors”, “IsBreaking”, c => c.Boolean(nullable: false)); using (Context ctx = new Context()) { var validation = ctx.RequestValidationErrorSet.FirstOrDefault(x => x.WordCode == “RequestValidationError.MoreThanOneItemFound”); if (validation != null) { validation.IsBreaking = false; ctx.SaveChanges(); } } } 这样,EF在说话时抛出错误 System.InvalidOperationException:自创建数据库以来,支持’DbContext’上下文的模型已更改。 考虑使用Code First Migrations来更新数据库 是否可以在此更改数据库,还是应该在其他地方更改数据库?

Asp.net身份过期会话Cookie

我们使用MVC 5.2和ASP.NET Identity框架进行身份validation,使用表单身份validation屏幕(用户和密码组合),并使用cookie保留身份。 我在我的启动方法中为Identity框架配置了将身份validationcookie的到期时间设置为30天,当用户选择“记住我”(IsPersistent = true)时,这很好用。 当IsPersistent = false(用户选择不选择’Remember me’)时,默认情况下会创建会话cookie。 此会话cookie在Internet Explorer和FireFox中运行良好,当浏览器关闭时,cookie将丢失。 在Chrome和Safari(也可能是其他浏览器)中,有一些选项可以确保会话cookie不会丢失,在这种情况下,即使浏览器关闭并重新打开,用户也会保持登录状态。 我希望能够确保会话cookie不会永久存在,但会在一小时内丢弃。 我可以通过检查帐户是否在X分钟/小时内没有活动而用户从未选择“记住我”来实现这一点,然后如果时间跨度过去,则用户身份被下一个请求“拒绝”。 有没有人在他们的ASP.NET身份实现中创建了一个解决方案,以确保会话cookie在X时间之后在后端过期,或者是否有更好的方法来解决这个限制? 也许可以使用CookieAuthenticationProvider的自定义实现来执行此操作,或者将过期日期/时间交给用户声明,可以在ValidateIdentity流程中的某处进行检查? 任何想法都会很棒。 提前谢谢你,-Igor 编辑 – 更多信息:我的身份validation实现有2种基本“模式”(目前无法想到更好的词)。 我的实现是一个简单的用户名/密码表单,带有一个“记住我”的复选框。 复选框值传递给AuthenticationProperties对象的IsPersistent属性,该属性传递给AuthenticationManager :: SignIn方法。 用户想要“记住我”,这会创建一个长期存在的cookie,使用滑动过期设置30天。 这使用户能够在浏览器会话之间保持身份validation,并且由于不活动而没有超时,除了不访问该站点超过30天。 我的owin启动方法中的设置反映了cookie的到期时间为30天(CookieAuthenticationOptions.ExpireTimeSpan设置为30天)。 无论浏览器平台如何,这都有效(据我所知)。 用户不想“记住我”,预期的行为应该是创建会话cookie,当浏览器关闭时,会话cookie将从浏览器中删除。 这应该确保下次启动浏览器时用户未经过身份validation。 当像公共计算机一样使用共享设备时,这一点尤为重要。 问题是并非所有浏览器都会删除会话cookie,如果启用了浏览器设置,有些会故意将它们留下(Chrome就是一个很好的例子)。 会话cookie没有到期日期/时间,因此CookieAuthenticationOptions.ExpireTimeSpan在此处没有任何影响。 这是我正在寻找建议的地方,因为我相信我不能成为第一个遇到此问题的人。 可能有一种方法可以使这种行为更安全,因为替代方法是什么也不做,并且可能在浏览器上留下会话cookie(永不过期!)。 有关Chrome和会话Cookie的详细信息,请参阅此链接。

带有entity framework的强类型ASP.NET MVC

此代码无法实际保存任何更改: // // POST: /SomeType/Edit/5 [AcceptVerbs(HttpVerbs.Post)] public ActionResult Edit(Guid id, SomeType Model) { db.AttachTo(Model.GetType().Name, Model); db.ApplyPropertyChanges(Model.EntityKey.EntitySetName, Model); db.SaveChanges(); return RedirectToAction(“Index”); } ASP.NET MVC将对象Model创建为Department类型EntityObject,其EntityState值为Detached 。 使用AttachTo方法后,其EntityState变为Unchanged 。 附加对象的MSDN(entity framework) 对象以Unchanged状态附加到对象上下文。 由于其Unchanged状态, ApplyPropertyChanges方法不执行任何操作。 我想让它改为状态。 关于EntityState枚举的MSDN 超脱 该对象存在但对象服务未对其进行跟踪。 在创建实体并将其添加到对象上下文之前,实体立即处于此状态。 通过调用Detach方法或使用NoTrackingMergeOption加载实体后,实体也处于此状态。 不变 该对象尚未被修改,因为它已加载到上下文中或自上次调用SaveChanges方法以来。 改性 对象已更改,但尚未调用SaveChanges方法。 我无法将EntityObject的EntityState属性显式设置为Modified 。 它是只读的。 使用EntityObjects的强类型MVC控制器是不是不可能?

SQL语句的某些部分嵌套太深。 重写查询或将其分解为较小的查询

我在我的控制器中有动作调用以下方法: public IQueryable getcontactinfo(long[] id) { var organizationsiteids = from accountsitemapping in entities.AccountSiteMappings where id.Any(accountid => accountsitemapping.ACCOUNTID == accountid) select accountsitemapping.SITEID; var usersdepts = from userdept in entities.UserDepartments join deptdefinition in entities.DepartmentDefinitions on userdept.DEPTID equals deptdefinition.DEPTID where organizationsiteids.Any(accountid => deptdefinition.SITEID == accountid) select userdept; var contactsinfos = from userdept in usersdepts join contactinfo in entities.AaaUserContactInfoes […]

以不同的方式使用Razor视图引擎

我认为如果我可以使用新的MVC Razor View引擎作为邮件合并技术会很有趣。 它仍然可以是MVC网站的一部分,而不必是独立的控制台应用程序。 例: string myTemplate = “Hello @Name, How are you today?”; ViewModel.Name = “Billy Boy”; string output = RazorViewEngineRender( myTemplate, ViewModel ); 那么string output = “Hello Billy Boy, How are you today?” 主要的是我希望模板是从字符串而不是视图或部分视图驱动的。 有谁知道这是否可能? 更新: Ben和Matt在codeplex上做了一个项目: http: //razorengine.codeplex.com/

MVC – 具有多个选择列表的控制器

当他们的模型依赖于大量选择列表时,有没有什么好方法可以让我的控制器更简单? 我尽量保持我的大多数控制器操作尽可能简单(希望不超过10行),但在需要大量下拉菜单的页面上,我的操作通常会超出此范围: public class Model { public IEnumerable AllLocations { get; set; } public IEnumerable TopLocations { get; set; } public IEnumerable AllTemplates { get; set; } public IEnumerable TopTemplates { get; set; } // … } [HttpGet] public ActionResult Index(int id) { var domain = Repository.Get(id); var model = Mapper.Map(item); // any way to […]

是否可以创建自定义ASP.NET MVC强类型HTML帮助程序?

我想知道是否可以在ASP.NET MVC 2中创建自定义强类型HTML Helper? 创建一个常规(读取非强类型)帮助器很简单,但我很难创建强类型版本。 例如,我想创建一个DatePickerFor html帮助器… 任何指导或片段将不胜感激,谢谢你提前! J.P