Tag: asp.net mvc 3

使用EF Code First的多对多关系

我有两个类定义如下: public class Questionnaire { public int QuestionnaireID { get; set; } public string Title { get; set; } public bool Active { get; set; } public virtual ICollection Questions { get; set; } public virtual ICollection Vendors { get; set; } } public class Vendor { public int VendorID { get; set; } public […]

如何通过更改ASP.NET MVC中的Url来阻止对控制器的访问?

我想只访问带有成功消息的页面,当用户点击按钮时… 通过更改url,例如…/Success我希望我的网站将用户重定向到上一页。 我怎么能通过ASP.NET MVC 3做到这一点?

填充ASP.NET MVC 3应用程序中的下拉框的问题

我已经在www.asp.net上完成了关于MVC 3的新教程(音乐商店)。 一切都很顺利,除了应该从数据库中填充两个下拉框的部分 – 而它们不是。 我按照教程并双重检查了我的代码。 我认为问题可能是使用editorstemplate文件夹。 因为我是MVC的新手,所以不知道。 那么问题是什么,或者我该如何调试呢? ============== 编辑1 好的所以这里是album.cshtml的一些代码,它位于/ views / shared / editortemplates /文件夹中 @model MvcMusicStore.Models.Album @Html.LabelFor(model => model.Genre) @Html.DropDownList(“GenreId”, new SelectList(ViewBag.Genres as System.Collections.IEnumerable, “GenreId”, “Name”, Model.GenreId)) @Html.LabelFor(model => model.Artist) @Html.DropDownList(“ArtistId”, new SelectList(ViewBag.Artists as System.Collections.IEnumerable, “ArtistId”, “Name”, Model.ArtistId)) 我相信其中包括: public ActionResult Edit(int id) { ViewBag.Genres = storeDB.Genres.OrderBy(g => g.Name).ToList(); ViewBag.Artists = […]

传递到字典中的模型项的类型为“MyType”,但此字典需要“MyType”类型的模型项

是的,我用相似的标题审阅了这些问题。 它们似乎都不符合我所处的情况。它只是程序员向视图发送错误的对象类型。 这是我收到的确切错误消息: 传递到字典中的模型项的类型为“IS.Extensions.Models.ContactSelectList”,但此字典需要“IS.Extensions.Models.ContactSelectList”类型的模型项。 我开始在我们的解决方案中移动视图和模型类,试图使其“类似于框架”。 有了这个,我的意思是我们拥有的一些视图/模型用于多个MVC应用程序,而某些视图/模型特定于某个MVC应用程序。 移动ContactSelectList视图后,问题就开始了。 常见视图位于使用Razor生成器编译它们的项目中。 在我看来,我有这个: @model IS.Extensions.Models.ContactSelectList 并且在调试时我可以看到我发送给RenderPartial方法的模型是相同的类型: 一些旁注: IS是一个MVC Web应用程序,并引用IS.Extensions IS.Extensions是IS引用的类库 ContactSelectList.cshtml位于IS \ Views \ Controls中 ContactSelectList.cs模型类位于IS.Extensions \ Models中 ‘父视图’(触发此RenderPartial调用的视图位于’common’项目中:ZModel.Web \ Views \ Controls 有谁知道这里发生了什么? 错误消息有点令人困惑,并不是真正的帮助.. 在Erics评论后编辑: 包含模型类(ContactSelectList.cs)的程序集是动态加载的。 为什么? 因为我认为创建一种扩展/插件系统是有意义的,在某个目录中删除某个dll会扩展具有某些特定应用程序的常见模型。 这是如何(稍加修改): var zExtenderAssembly = Assembly.LoadFile(path); extenderType = zExtenderAssembly.GetTypes().ToList().Where(t => t.GetInterface(“IZExtender”) != null).FirstOrDefault(); return (Activator.CreateInstance(extenderType) as IZExtender).CreateBO(“ContactSelectList”); ZExtender中的’CreateBo’方法(实现IZExtender)只是创建一个ContactSelectList的新实例(与ZExtender位于同一个库中,因此不需要reflection): public Component CreateBO(string […]

ViewStartPage只能与从WebViewPage或其他ViewStartPage派生的页面一起使用

由于一些必需品,我创建了自己的自定义View Start,如下所示: public abstract class MyViewStart : System.Web.Mvc.ViewStartPage { public My.Helpers.ThemeHelper Themes { get; private set; } public MyViewStart() : base() { Themes = new Helpers.ThemeHelper(base.ViewContext) } } 需要的是在_ViewStart中我需要做一些取决于主题的布局文件查找,它的作用与问题无关。 我的意见/共享/ _ViewStart.cshtml看起来像这样(删除了无关的东西): @inherits MyNamespace.MyViewStart @{ Layout = Themes.ThemeLayout; } 因此,我们有一个自定义的ViewStart类,它派生自标准的ViewStartPage。 标准_ViewStart.cshtml是一个ViewStartPage。 新的_ViewStart.cshtml是一个MyViewStart页面,而该页面又是一个标准的ViewStartPage,因此所有内容都包含在inheritance中。 但是,当我运行应用程序时,我收到错误: ViewStartPage只能与从WebViewPage或其他ViewStartPage派生的页面一起使用 这是由我的自定义视图启动类的构造函数中的“Themes = new Helpers.ThemeHelper”行引发的。 那么,当我的自定义视图启动类是ViewStartPage的子节点时,为什么它会抛出该exception?

如何获取模型属性的id以与MVC3中的自定义IClientValidatable一起使用

我正在尝试编写一个自定义validation属性,该属性将有条件地要求基于模型的布尔属性的字段。 我有我的属性实现IClientValidatable。 我有要检查的属性的名称,但我不知道如何获取目标属性的客户端ID。 public IEnumerable GetClientValidationRules(ModelMetadata metadata, ControllerContext context) { var clientTarget = ?????; var rule = new ModelClientValidationRule() { ErrorMessage = FormatErrorMessage(metadata.DisplayName ?? metadata.PropertyName), ValidationType = “requiredif” }; rule.ValidationParameters[“target”] = clientTarget; yield return rule; } javascript: $.validator.addMethod(“requiredif”, function (value, element, target) { //check on value of target }); $.validator.unobtrusive.adapters.addSingleVal(“requiredif”, “target”); 如何获取目标属性的客户端ID,以便客户端javascript可以检查值?

MVC 3路由和操作链接不遵循预期的上下文路由

我正在尝试做一个自定义路由,所以我可以在我的应用程序中使用选定的字符串作为前缀,并根据它进行一些处理。 我遇到的问题是,生成的操作链接不是基于它所存在的URL进行上下文化的。 路线: routes.MapRoute( “TestRoute”, “TEST/{controller}/{action}/{id}”, new { controller = “Space”, action = “Index”, id = UrlParameter.Optional }); routes.MapRoute( “Default”, “{controller}/{action}/{id}”, new { controller = “Space”, action = “Index”, id = UrlParameter.Optional }); 导航到TEST / Space / Index工作,以及Space / Index,但我需要修复的奇怪问题是,通过ActionLink生成的链接不服从它们被加载的上下文,至少对于{controller} / { action} / {id}默认路由。 在TEST / Space / Index列表下加载的页面链接正确,但是当加载/ Space / Index时,它们都引用了调用URL所没有的TEST /路由。 这是默认行为吗? […]

如果cookie存在,即使它是在另一个应用程序中创建的,如何检查? (使用JS或C#)

我有几个应用程序,其中一个是管理身份validation的中央应用程序,其中LogOn页面作为IFrame导入到其他应用程序。 当userName和password正确时,我创建一个名为userInfo的cookie。 现在,在当前的应用程序中,我想检查userInfo的cookie是否存在。 我想我应该检查它是否存在于浏览器中(在客户端)。 它必须是可能的,所以我该怎么办呢? 提前致谢。

MVC3比较属性和嵌套对象属性

我有以下内容: public class Address { public string Email { get; set; } } public class CheckoutViewModel { public Address Address { get; set; } [Compare(“Address.Email”, ErrorMessage = “The email addresses you entered do not match”)] public string ConfirmEmailAddress { get; set; } } 使用客户端JS,这可以正确地处理和validation。 但是,在没有启用Javascript的情况下进行测试时,表单会回发,但ModelState错误会显示: 找不到名为Address.Email的属性。 有关为什么在客户端而不是服务器上工作的任何想法? 这种情况下的解决方案是什么? 非常感谢。

MVC3中的POCO类和ViewModel

我不是一个经验丰富的MVC3开发人员,但我想成为。 我熟悉POCO类和ViewModels,因为前者描述了数据库的每个类,后者用于mvc3中的强类型视图。 对于经验丰富的开发人员来说,我的问题并不复杂,但我对此感到有些困惑。 问题是,我有一个包含三个项目的解决方案; 我在其中编写了POCO类的Model类库。 这是一个例子: 。 public class Service { [Key] [DatabaseGenerated(System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption.Identity)] public int ServiceID { get; set; } //————————————————————// [Required, MaxLength(30)] [LocalizedAttribute(“Name”)] public string Name { get; set; } //————————————————————// [MaxLength(100)] [LocalizedAttribute(“Description”)] public string Description { get; set; } //————————————————————// [Required] public long ModifiedByUserID { get; set; } [ForeignKey(“ModifiedByUserID”)] public virtual User OperatorUser […]