Tag: asp.net mvc

ASP.NET MVC 3和4之间的区别?

是否有一个全面的列表,解释了MVC4的所有新特性,以及MVC3的所有变化? ( 发行说明没有多大帮助)

ASP.NET MVC中的Page.ResolveUrl是什么?

Controller中可用的ASP.NET MVC中的Page.ResolveUrl是什么?

ASP.NET MVC:Razor中的自定义Html Helpers

使用Razor时,我遇到了Html Helpers的困难。 所述帮助者在MVC 2中使用web表单视图引擎工作良好。 但不是在剃刀。 我在运行时得到的错误是: Compiler Error Message: CS1502: The best overloaded method match for 'System.Web.WebPages.WebPageExecutingBase.Write(System.Web.WebPages.HelperResult)' has some invalid arguments Source Error: Line 1: @using Wingspan.Web.Mvc; Line 2: @Html.IncrementalMenu(MenuBlock.Site) 展开显示详细的编译器输出显示: d:\…\Views\Shared\MenuTop.cshtml(2,1): error CS1502: The best overloaded method match for 'System.Web.WebPages.WebPageExecutingBase.Write(System.Web.WebPages.HelperResult)' has some invalid arguments d:\…\Views\Shared\MenuTop.cshtml(2,7): error CS1503: Argument 1: cannot convert from 'void' to […]

login请求validation令牌问题

我一直在经历一个开发项目的错误日志,并发现以下错误(名称改为保护有罪无辜) – 提供的防伪标记是为了用户“”,但当前用户是“pipe理员”。 这不是一个特别难以重现的问题, 在login页面打开应用程序 在login之前,在同一台计算机上的同 一个浏览器中打开第二个窗口或标签页至login页面 在第一个窗口login(或者其次,顺序无关紧要) 尝试login剩余的login窗口 堆栈跟踪是 – System.Web.Mvc.HttpAntiForgeryException(0x80004005):提供的防伪标记用于用户“”,但当前用户是“admin”。 在System.Web.Helpers.AntiXsrf.TokenValidator.ValidateTokens(HttpContextBase httpContext,IIdentity标识,AntiForgeryToken sessionToken,AntiForgeryToken fieldToken)System.Web.Helpers.AntiXsrf.AntiForgeryWorker.Validate(HttpContextBase httpContext)在System.Web.Helpers.AntiForgery。在System.Web.Mvc.ValidateAntiForgeryTokenAttribute.OnAuthorization(AuthorizationContext filterContext)上System.Web.Mvc.ControllerActionInvoker.InvokeAuthorizationFilters(System.Web.Mvc.Async.AsyncControllerActionInvoker的ControllerContext controllerContext,IList`1filter,ActionDescriptor actionDescriptor)上的Validate()。 c__DisplayClass25.b__1e(AsyncCallback asyncCallback,Object asyncState) login方法签名是 – [HttpPost] [AllowAnonymous] [ValidateAntiForgeryToken] public ActionResult Login(LoginModel model, string returnUrl) { … } 这与Internet“ASP.NET MVC 4 Web应用程序”模板项目中的方法签名完全相同,这表示Microsoft或者觉得ValidateAntiForgeryToken是必需/最佳实践,或者仅仅因为使用了此属性而添加了属性其他地方。 很明显,我没有办法处理这个方法中的问题,因为它没有到达,ValidateAntiForgeryToken是一个预先请求的filter,它在请求到达控制器之前阻塞了它。 在提交表单之前,我可以检查用户是否通过Ajax进行了validation,如果是,则尝试redirect到它们,或者直接删除该属性。 问题是这个 – 我知道这个标记是devise来防止来自另一个站点(CSRF)的请求,当用户已经对你的站点进行了authentication的时候,所以在这个基础上把它从一个定义将被使用的表单通过未经authentication的用户 ? 据推测,这个实例中的属性旨在减轻为您的应用程序提供虚假login表单的恶意行为者(尽pipe在抛出exception的时候,用户可能已经input了他或她将要logging的详细信息,但可能会提醒他们是错的)。 否则,从外部网站向表单提交不正确的凭证将导致与网站本身的结果完全相同的结果? 我不是依靠客户端validation/卫生来清理潜在的不安全的input。 有其他开发者遇到这个问题(或者我们有非凡的创造性的用户),如果是的话,你是如何解决/缓解它? 更新:这个问题仍然存在于MVC5,完全故意,现在与错误消息“所提供的防伪令牌是针对不同的基于声明的用户比当前用户”。 当使用默认的模板和身份提供者。 Microsoft Developer […]

如何在Microsoft.AspNet.Identity.EntityFramework.IdentityUser中更改id的types

(ASP.NET MVC 5,EF6,VS2013) 我试图找出如何更改types的string中的“Id”字段的types为int : Microsoft.AspNet.Identity.EntityFramework.IdentityUser 为了让新的用户帐户与一个整数ID而不是一个GUID相关联。 但是,似乎这将比在我的派生用户类中简单地添加一个带有inttypes的新的Id属性更为复杂。 看看这个方法签名: (从程序集Microsoft.AspNet.Identity.Core.dll) public class UserManager<TUser> : IDisposable where TUser : global::Microsoft.AspNet.Identity.IUser { … public virtual Task<IdentityResult> AddLoginAsync(string userId, UserLoginInfo login); … } 所以,似乎还有其他的方法被烘焙到ASP.NET身份框架中,要求userId是一个string。 我是否还需要重新实现这些类? 解释为什么我不想在用户表中存储ID的GUID: – 将有其他表格通过外键将数据与用户表相关联。 (当用户在网站上保存内容。)我没有理由使用更大的字段types,并花费额外的数据库空间没有明显的优势。 (我知道还有其他一些关于使用GUID和int ID的post,但是似乎很多人认为int id更快,占用空间更less,这仍然让我感到疑惑。 我计划公开一个平静的端点,允许用户检索有关特定用户的数据。 我认为: /users/123/name 比…更清洁 /users/{af54c891-69ba-4ddf-8cb6-00d368e58d77}/name 有谁知道为什么ASP.NET团队决定以这种方式实现ID? 我试图将其更改为inttypes,目光短浅吗? (也许我错过了好处。) 谢谢… -ben

ASP.NET MVC – 如何保留RedirectToAction的ModelState错误?

我有以下两个操作方法(简化问题): [HttpGet] public ActionResult Create(string uniqueUri) { // get some stuff based on uniqueuri, set in ViewData. return View(); } [HttpPost] public ActionResult Create(Review review) { // validate review if (validatedOk) { return RedirectToAction("Details", new { postId = review.PostId}); } else { ModelState.AddModelError("ReviewErrors", "some error occured"); return RedirectToAction("Create", new { uniqueUri = Request.RequestContext.RouteData.Values["uniqueUri"]}); } } […]

Visual Studio ASP.Net MVC撤消设置为起始页面操作

我有一个我正在工作的Web应用程序,它工作正常,直到我的好奇心得到了更好的,我右键单击视图,并select设置为起始页选项。 现在,每当我运行我的应用程序,它将带我到资源未find错误页面。 我有我的全局configuration路由中设置的默认注册路由,这之前工作正常。 我注意到这个URL现在是这样写的: HTTP://本地主机:1234 /浏览/用户/的Login.aspx 代替 HTTP://本地主机:1234 / 像以前一样。 我不知道如何撤消这个动作或改变了什么,我看着我的web.config文件,但我不知道该找什么,确切地说,帮助表示赞赏。

活动菜单项 – asp.net mvc3母版页

我一直在四处扫描,试图find一个合适的解决scheme,将“主动/当前”类分配给母版页的菜单项。 这条线是关于是否做这个客户端与服务器端分开。 实际上我对JavaScript和MVC都是新手,所以我没有意见。 我宁愿以“最干净”和最恰当的方式来做到这一点。 我有以下jQuery代码来分配“活动”类到<li>项…唯一的问题是“索引”或默认视图菜单项将始终被分配活动类,因为URL始终是一个子string其他菜单链接: (default) index = localhost/ link 1 = localhost/home/link1 link 2 = localhost/home/link1 $(function () { var str = location.href.toLowerCase(); $('#nav ul li a').each(function() { if (str.indexOf(this.href.toLowerCase()) > -1) { $(this).parent().attr("class","active"); //hightlight parent tab } }); 有没有更好的方法做这个,伙计? 至less有人会帮助我获得客户端版本的防弹? 那么“索引”或默认链接总是“活跃”? 有没有办法给索引方法分配一个假扩展? 而不仅仅是基本的URL,它将是localhost/home/dashboard以便它不会是每个链接的子string? 实际上,我并不真正遵循做这个服务器端的方法,这就是为什么我试图用jQuery做客户端…任何帮助,将不胜感激。

我如何使用RedirectToAction维护ModelState?

如果我的ModelState中存在错误而又不丢失我的ModelState信息,如何返回其他操作的结果或将用户移动到另一个操作? 情况是; 删除操作接受来自我的索引操作/视图呈现的DELETE表单的POST。 如果删除中存在错误我想将用户移回到索引操作/视图中,并在ViewData.ModelState显示Delete操作存储的错误。 这怎么能在ASP.NET MVC中完成? [AcceptVerbs(HttpVerbs.Post | HttpVerbs.Delete)] public ActionResult Delete([ModelBinder(typeof(RdfUriBinder))] RdfUri graphUri) { if (!ModelState.IsValid) return Index(); //this needs to be replaced with something that works 🙂 return RedirectToAction("Index"); }

新的Asp.Net MVC5项目产生一个无限循环login页面

我正在使用Visual Studio 2013创build一个全新的工程,我selectAsp.Net MVC和框架4.5.1项目已经创build,那么除了F5,我什么也不做,只能启动默认的网页。 不幸的是,它产生了一个redirect到login页面,该页面也被redirect到login页面。 这是我在浏览器中的一个简短版本的URL: http://localhost:5285/Account/Login?ReturnUrl=%2FAccount%2FLogin%3FReturnUrl%3D%252FAccount%252FLogin%253FReturnUrl%253D%25252FAccount%25252FLogin%25253FReturnUrl%25253D%2525252FAccount%2525252FLogin%2525253FReturnUrl%2525253D%252525252FAccount%252525252FLogin%252525253FReturnUrl%252525253D%25252525252FAccount%25252525252FLogin%25252525253FReturnUrl%25252525253D%2525252525252FAccount%2525252525252FLogin%2525252525253FReturnUrl%2525252525253D%252525252525 我在事件查看器中没有任何错误。 但在屏幕上我看到: “HTTP错误404.15 – 未find请求筛选模块被configuration为拒绝查询string太长的请求。 该网站在IIS Express中以默认设置运行。 我该如何解决这个问题? 我猜测我的Visual Studio 2013有什么不对吗? 编辑 它可以工作,如果我创build一个全新的网站,我把它托pipe在IIS中。 但是,如果我创build一个新的网站(不需要修改任何东西),只需点击播放(默认启动IIS Express),它不会。 编辑2 我已经删除了Documents \ IISExpress \ config \ applicationhost.config中的每个网站 。 我已经重新编译了一切,并创build了这个条目: <siteDefaults> <logFile logFormat="W3C" directory="%IIS_USER_HOME%\Logs" /> <traceFailedRequestsLogging directory="%IIS_USER_HOME%\TraceLogFiles" enabled="true" maxLogFileSizeKB="1024" /> </siteDefaults> <applicationDefaults applicationPool="Clr4IntegratedAppPool" /> <virtualDirectoryDefaults allowSubDirConfig="true" /> </sites> 我仍然遇到IIS Express的错误,而不是IIS。