Tag: asp.net mvc

来自数据库的MVC模型validation

我有一个非常简单的模型,需要从数据库中进行validation public class UserAddress { public string CityCode {get;set;} } CityCode可以具有仅在我的数据库表中可用的值。 我知道我可以做点什么。 [HttpPost] public ActionResult Address(UserAddress model) { var connection = ; // create connection var cityRepository = new CityRepository(connection); if (!cityRepository.IsValidCityCode(model.CityCode)) { // Added Model error } } 这似乎非常WET因为我必须在很多放置时使用这个模型并且添加相同的逻辑,每个地方似乎我没有正确使用MVC架构。 那么,从数据库validation模型的最佳模式是什么? 注意:大多数validation是从数据库进行单字段查找,其他validation可能包括字段组合。 但是现在我对单场查找validation很满意,只要它是DRY并且没有使用过多的reflection就可以接受。 没有客户端validation: 对于在客户端validation方面回答的任何人,我不需要任何此类validation,我的大多数validation都是服务器端的,我需要相同的,请不要回答客户端validation方法。 PS如果任何人可以给我提示如何从数据库进行基于属性的validation,将会非常有用。

由于不区分大小写的URL和默认值,我如何避免ASP.NET MVC中的重复内容?

编辑 :现在我需要真正解决这个问题,我做了一些调查,并想出了一些减少重复内容的东西。 我在我的博客上发布了详细的代码示例: 使用ASP.NET MVC减少重复内容 第一篇文章 – 如果我标记错误或标记错误,请轻松一下:P 在Microsoft的新ASP.NET MVC框架中,似乎有两件事可能导致您的内容在多个URL上提供(Google会惩罚这些内容并导致您的PageRank在其中分割): 不区分大小写的URL 默认url 您可以设置默认控制器/操作以满足对域根目录的请求。 假设我们选择HomeController / Index。 我们最终提供以下提供相同内容的url: mydomain.com/ mydomain.com/Home/Index 现在,如果人们开始链接到这两者,那么PageRank将被拆分。 谷歌也会认为它是重复的内容,并惩罚其中一个内容,以避免其结果重复。 除此之外,URL不区分大小写,因此我们实际上也为这些URL获取了相同的内容: mydomain.com/Home/Index mydomain.com/home/index mydomain.com/Home/index mydomain.com/home/Index (列表还在继续) 所以,问题是……我如何避免这些处罚? 我想要: 所有将默认操作的请求重定向(301状态)到同一个URL 所有URL都区分大小写 可能?

在ASP.NET MVC站点中正确构建Lucene.Net用法

我正在构建一个ASP.NET MVC站点,我计划使用Lucene.Net。 我已经设想了一种构建Lucene使用方法的方法,但不确定我的计划架构是否正常且高效。 我的计划: 在Global.asax中的Application_Start事件:我检查文件系统上是否存在索引 – 如果它不存在,我创建它并用从数据库中提取的文档填充它。 提交新内容时:我创建一个IndexWriter ,填写文档,写入索引,最后处理IndexWriter 。 IndexWriters没有被重用,因为我无法想象在ASP.NET MVC应用程序中这样做的好方法。 编辑内容时:我重复与提交新内容时相同的过程,但我先删除旧内容然后添加编辑。 当用户搜索内容时:我检查HttpRuntime.Cache以查看用户是否已在过去5分钟内搜索过该术语 – 如果有,我会返回这些结果; 否则,我创建一个IndexReader ,构建并运行一个查询,将结果放入HttpRuntime.Cache ,将它们返回给用户,最后处理IndexReader 。 再一次, IndexReaders不会被重用。 我的问题: 这是一个很好的结构 – 我怎样才能改进它? 我应该注意哪些性能/效率问题 ? 另外,是不是重复使用IndexReaders和IndexWriters一个巨大的代码味道?

我无法从表中填充DropDownList。 EF和MVC4

我相信这会在我的HomeController中创建一个列表。 但不确定是什么调用它或它在Controller旁边的位置可能是第一个Add ActionResult(GET方法)。 public static IEnumerable items() { using (oesacEntities_compact db = new oesacEntities_compact()) { var query = from s in db.tblSponsors select new { s.SponsorID, s.BizName }; return query.AsEnumerable() .Select(x => new SelectListItem { Value=x.SponsorID.ToString(), Text = x.BizName }).ToList(); } } 我似乎无法将其发送到添加视图或从添加视图引用它: @Html.DropDownListFor(model => model.SponsorID,IEnumerable SelectList); 在其他编码语言中似乎很简单。 我想填充一个下载大约有200个赞助商ID的下拉值,BizNames用于文本。 至少现在。 当我想要显示具有所选值的编辑视图时,上帝帮助我。 谢谢你的stackoverflow

“无法以静默方式获取令牌。 调用方法AcquireToken“

try { ClientCredential clientCredential = new ClientCredential(“***********”,”**************”); UserIdentifier userIdentifier = new UserIdentifier(userObjectId, UserIdentifierType.UniqueId); DiscoveryClient discClient = new DiscoveryClient(SettingsHelper.DiscoveryServiceEndpointUri, async () => { var authResult = await authContext.AcquireTokenSilentAsync(SettingsHelper.DiscoveryServiceResourceId, clientCredential, userIdentifier); return authResult.AccessToken; }); var dcr = await discClient.DiscoverCapabilityAsync(capabilityName); return new OutlookServicesClient(dcr.ServiceEndpointUri, async () => { var authResult = await authContext.AcquireTokenSilentAsync(dcr.ServiceResourceId, clientCredential, userIdentifier); return authResult.AccessToken; }); } […]

设置值从集合提交提交mvc

我想进入控制器和模型以及来自集合的特定值,其中我按下按钮 ProductId Productname Quantity UnitPrice <% for(int i=0; i m.NorthOrderDetails[i].Quantity) %> m.NorthOrderDetails[i].UnitPrice) %> <input type="submit" title="ads" value = name=ssad /> 例如,我可以在集合中设置提交值吗? <input type="submit" title="ads" value = name=ssad /> 并且该值将等于17,例如在控制器中。 这项工作,但我如何将按钮中的文本从集合中的值更改为任何文本? 更新我使用Stephen Muecke的代码,但我编辑表因为我使用aspx页面 <button type="button" class="delete" data-id="”>Delete <input type="hidden" name="” value=”” /> 并且,遗憾的是脚本不会调用控制器

Mvcsitemapprovider到单个页面的多个路径

我想让breadcrump导航到同一页面的3条路径。 站点地图位于底部。 我尝试使用属性“类型”和“密钥”,但它没有帮助。 每次当我打开动作ActionDetails时,breadcrump看起来像root> Finished> Action 根据模型的状态在控制器中确定路径的选择。 我现在应该编写自己的DynamicNodeProvider,但我不知道如何从controler将参数传递给Provider。 我无法使用动作注释,因为我现在的动作体模型就像在底部: public ActionResult ActionTabDetails(Guid actionTabGuid) { ActionTab model = actionTabRepo.Get(actionTabGuid, “ActionGroup”); if (model.Status == ActionStatus.New) { //Parameter with I want to pass to the DynamicNodeProvider or select current node } //another conditions return View(“ActionTab/ActionTabDetails”, model); } 我试过了: SiteMap.CurrentNode = SiteMap.Provider.FindSiteMapNodeFromKey(“new”); 但在控制器中只是吸气剂。 我会非常感激你的帮助。 更新: 我用可选参数做了动作: public ActionResult ActionTabDetails(Guid […]

asp.net mvc本地化

我正在尝试使用路由实现本地化 我有以下内容: routes.MapRoute( “DefaultLocalized”, “{lang}/{controller}/{action}/{id}”, new { controller = “Home”, action = “Index”, id = “”, lang = “en” } ); routes.MapRoute( “Default”, “{controller}/{action}/{id}”, new { controller = “Home”, action = “Index”, id = “” } ); 当我调用我的页面domain/en/home/index ,它工作正常,但是当我调用domain/home/index我得到错误404:找不到资源。 此外,当我在domain/en/home/index并且我点击一个安全页面时,我被重定向到domain/Account/login ,我如何被重定向到domain/en/Account/login ? 另外,当我收到应用程序错误时,如何将其重定向到domain/en/home/error ? 真正的问题是如何使用语言作为路由参数实现本地化?

如何在ASP.NET MVC站点中实现速率限制?

我正在构建一个ASP.NET MVC站点,我想限制经过身份validation的用户使用该站点的某些function的频率。 虽然我理解速率限制如何从根本上解决,但我无法想象如何以编程方式实现它而不会产生主要的代码气味。 你能用C#示例代码指出一个简单而强大的解决方案来解决这个问题吗? 如果重要,所有这些函数当前都表示为仅接受HTTP POST Actions。 我最终可能希望为HTTP GET函数实现速率限制,所以我正在寻找适用于所有这些情况的解决方案。

使用C#从ASP.Net MVC访问Active Directory

我需要访问Active Directory以获取有关客户所属组的信息。 我的项目是使用C#的ASP.Net MVC应用程序。 我之前从未编写过针对Active Directory的编程,并且需要一些关于最佳入门方法的建议,使用什么安全模型来访问信息,并且可能指向一些好的教程。