Tag: asp.net mvc 2

ModelMetaData:如何获得“父” – 元数据?

在我看来,我调用Html.EditFor()来触发此数据类型的自定义编辑器模板。 另外我传递了一些元数据(这是我不喜欢的部分): Model.Title, new { metaData = metaTitle })%> 传递的类型(属性Title)的类型为“Translation”。 在自定义编辑器模板中,我必须从viewData读取传递的元数据才能使用它: <%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl” %> // {…} if (ViewData[“metaData”] != null) metaData = (ModelMetadata)ViewData[“metaData”]; 有没有什么方法可以直接在自定义编辑器模板中访问元数据? 不幸的是,如果我在编辑器模板中调用以下内容,我将不会获得相同的元数据对象(例如,如果缺少Title-Property的信息,则会丢失): ModelMetadata metaData = ModelMetadataProviders.Current.GetMetadataForType(null, Model.GetType()); 我想避免在每次调用时传递元数据对象… 任何tipps的Thx! sl3dg3

如何从asp.net mvc 2应用程序中的自定义ValidationAttribute内部访问其他属性值?

我正在使用带有C#和DataAnnotations的asp.net mvc 2。 情况是这样的:我有一个针对模型类强类型的自定义控件。 此控件在视图上多次显示,但具有不同的属性值,例如标题(例如:问题1,问题2,问题3等等都是标题)。 我可以编写一个自定义validation类来validation整个对象,但问题是,我无法获得要显示的特定Html.ValidationMessage(…)标记。 validation错误仅显示在视图顶部的摘要中,我希望它们显示在validation失败的特定控件的顶部和旁边。 我已经尝试创建自定义validation类,如下所示,以逐个属性validation属性,但问题是我需要两个模型的值:评级和标题。 实际业务validation是针对评级执行的,但是标题属性向用户标识屏幕上的哪个控件不正确。 [AttributeUsage(AttributeTargets.Property)] public class RatingValidation : ValidationAttribute { public string Heading { get; private set; } private readonly string ErrorRatingInvalid = “Rating for {0} is invalid. Rating is required and must be between 1 and 5.”; public override string FormatErrorMessage(string name) { String errorMsg = ErrorRatingInvalid; return […]

将数据从模型传递到自定义validation类

我有一个数据validation类,用于检查会议的开始日期是否在结束日期之前。 该模型会自动传递需要validation的日期,但是我在传递需要validation的数据时遇到了一些困难。 这是我的validation课程 sealed public class StartLessThanEndAttribute : ValidationAttribute { public DateTime DateEnd { get; set; } public override bool IsValid(object value) { DateTime end = DateEnd; DateTime date = (DateTime)value; return (date < end); } public override string FormatErrorMessage(string name) { return String.Format(CultureInfo.CurrentCulture, ErrorMessageString, name); } } 这是包含数据注释的类 [StartLessThanEnd(ErrorMessage=”Start Date must be before the […]

如何注销不是当前用户的多个MembershipUser?

我正在使用隶属于MVC2默认项目的MembershipProvider。 我希望能够获取用户名列表,并关闭用户,并在需要时销毁他们的会话。 我似乎最接近的是: foreach(string userName in UserNames) { MembershipProvider MembershipProvider = new MembershipProvider(); MembershipUser membershipUser = MembershipProvider.GetUser(userName, true); Session.Abandon(); FormsAuthentication.SignOut(); } 我想我需要使用与我想要注销的用户相关的会话和/或注销方法,但我不确定它们会在哪里。 这样做的正确方法是什么?

从自定义模型活页夹调用默认模型活页夹?

我编写了一个自定义模型绑定器,它应该根据当前的文化来映射来自URL-Strings(GET)的日期(这里的旁注:如果你使用GET作为http-call,默认的模型绑定器不会考虑当前的文化…)。 public class DateTimeModelBinder : IModelBinder { #region IModelBinder Members public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) { if (controllerContext.HttpContext.Request.HttpMethod == “GET”) { string theDate = controllerContext.HttpContext.Request.Form[bindingContext.ModelName]; DateTime dt = new DateTime(); bool success = DateTime.TryParse(theDate, System.Globalization.CultureInfo.CurrentUICulture, System.Globalization.DateTimeStyles.None, out dt); if (success) { return dt; } else { return null; } } return null; // Oooops… […]

MVC路由不适用于虚拟目录上的非默认/根操作控制器

我在IIS上使用默认的“ASP.NET MVC 2 Web应用程序”(我没有管理员访问权限),而我可以导航到 “服务器/ ITEC” 如果服务器没有返回错误,我无法导航到“server / ITEC / About” – 404错误。 我也使用RouteDebugger进行测试 – 当我使用默认的“server / ITEC”时它匹配(也就是默认的home / index控制器动作)但是当我手动输入“server / ITEC / About”时我甚至看不到RouteDebugger页面。 另外值得注意的是,当我在“server / Itec / About”中放置一个“index.html”文件时,它返回结果,这使我相信目录配置为在处理请求时使用文件系统而不是MVC路由 – 这是一个安全的假设吗? 如何更新我的Global.asax文件以便我可以返回非默认控制器/操作? 或者这是一个服务器问题,我该如何解决这个问题? 谢谢! using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using System.Web.Routing; namespace mikeProg { // Note: For instructions on enabling […]

C#Asp.net Membership.GetAllUsers通过电子邮件订购

我正在使用Membership.GetAllUsers()来获取我的用户列表。 我希望按电子邮件地址排序返回列表,因为我需要标记一些带有重复电子邮件的帐户。 Membership.GetAllUsers()似乎默认按用户名排序。 有没有办法改变这种行为?

启用/禁用企业库登录生产

在我的制作中,我不希望有严重性为Verbose(或Debug)的日志条目。 我只需要信息,错误等。启用和禁用日志记录(调试条目)的正确方法是什么? 我做了一些研究,一种可能性是使用Custom Filter类来启用和禁用严重性为“verbose”的所有日志。 但是在生产中部署应用程序时,启用和禁用的正确方法是什么?

在ASP.NET MVC 2中,我可以使用默认的ModelBinder将查询字符串反序列化为数组吗?

在ASP.NET MVC 2中,您可以使用此URL和此控制器方法: GET http://server/controller/get?id=5 public ActionResult Get(int id) { … } 并且ModelBinder将在方法参数中将id=5查询字符串转换为id = (int) 5 。 但是,这不起作用: GET http://server/controller/get?idlist=1,2,3,4,5 public ActionResult Get(int[] idlist) { … } idlist在参数中为null。 虽然对此进行解析非常简单,但我想知道是否有办法更改方法签名或查询字符串以使默认的ModelBinder自动反序列化数组/集合?

如何构造HttpPostedFileBase?

我必须为此方法编写unit testing,但我无法构造HttpPostedFileBase …当我从浏览器运行该方法时,它运行良好,但我真的需要一个自动unit testing。 所以我的问题是:我如何构造HttpPosterFileBase以便将文件传递给HttpPostedFileBase。 谢谢。 public ActionResult UploadFile(IEnumerable files) { foreach (var file in files) { // … } }