小编Fan*_*rns的帖子

MVC 4 @Scripts"不存在"

我刚刚创建了一个ASP.NET MVC 4项目,并使用Visual Studio 2012 RC创建了一个Controller和Razor Views for IndexCreateActions.

当我来运行应用程序并浏览到Create视图时,显示以下错误:

编译器错误消息:CS0103:当前上下文中不存在名称"脚本"

问题是以下代码自动添加到视图的底部:

@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
}
Run Code Online (Sandbox Code Playgroud)

为什么Scripts不存在?

我查看了Assembly System.Web.Mvc.dll,v4.0.0.0中的基本Web页面类

我可以看到以下帮助器属性:

  • 阿贾克斯
  • HTML
  • 网址

但没有任何一个名为Scripts.

有任何想法吗?

编辑:

我的Web.config文件看起来像这样(不受Visual Studio创建的那个):

  <system.web.webPages.razor>
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <pages pageBaseType="System.Web.Mvc.WebViewPage">
      <namespaces>
        <add namespace="System.Web.Mvc" />
        <add namespace="System.Web.Mvc.Ajax" />
        <add namespace="System.Web.Mvc.Html" />
        <add namespace="System.Web.Routing" />
      </namespaces>
    </pages>
  </system.web.webPages.razor>
Run Code Online (Sandbox Code Playgroud)

编辑#2:

人们正在写关于使用@Scripts帮助者的博客:

然而,刚刚将Visual Studio 2012 RC安装到新的Windows 8安装上,@Scripts即使Visual Studio将其添加到生成的View中,我仍然无法使用!

解决方案如下.

我不知道如何关闭它,因为最终更新似乎解决了这个问题.我仔细检查了我使用新项目执行了干净安装.但是,我所做的同样失败的项目现在可以在各种更新后进行,并且没有人工明显的干预.感谢所有的想法,但当时肯定存在问题;)

asp.net-mvc razor

200
推荐指数
8
解决办法
18万
查看次数

DbContext SaveChanges() - 检测更新的实体

我已经重写了Entity Framework 4.1 DbContext类中的SaveChanges()方法.

我的覆盖如下:

public override int SaveChanges() {

    IEnumerable<DbEntityEntry> modifiedEntityEntries = ChangeTracker.Entries().Where( e => e.State == EntityState.Modified );

    Debug.Assert( modifiedEntityEntries.Count() == 2 );

    int savedChanges = base.SaveChanges();

    Debug.Assert( savedChanges == 1 );

    // HELP! At this point, how do I tell Which of the two "Modified" entities actually updated a row in the database?

    return savedChanges;

}
Run Code Online (Sandbox Code Playgroud)

假设上下文中有2个实体,并且都标记为Modified(EntityState.Modified).其中一个已被修改,并且与底层数据库行不同.另一个实际上与底层数据库行不同,它只是标记为这样.

调用SaveChanges()后,我如何判断这两个实体中哪一个实际更新了数据库中的一行,哪一个实际上没有真正修改过?

c# entity-framework savechanges dbcontext

6
推荐指数
1
解决办法
1万
查看次数

表达式<Func <TEntity,bool >>嵌套与Entity Framework一起使用

我已经阅读了大约30个Stack Overflow问题,以及大约20个博客,但找不到我的答案.那就是说,我确信我要求的答案就在那里,所以如果你知道它,请指出(请注意关于不符合我要求的答案的最后一段/句子).谢谢!

我坚持类似于以下类的类的实例:

public class Data {
    public int Id { get; set; }
}

public class Container {
    public int Id { get; set; }
    public Data Data { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

目前编写查询是为了通过抽象层查找容器,该抽象层要求Lambda Expression接受Container并返回bool(谓词).即使Entity Framework 5是首选的ORM,它也不会接受IQueryable.

我的任务是提供一个基于Lambda表达式的API表面,它接受数据类型.我无法更改抽象层(我必须传递一个接受Container的谓词)所以我试图将我收到的表达式转换为:

Expression<Func<Data , bool>>
to:
Expression<Func<Container , bool>>
Run Code Online (Sandbox Code Playgroud)

我在我的存储库类中添加了一个额外的方法,如下所示:

public Container Find( Expression<Func<Data , bool>> predicate ) {

    IEnumerable<Container> result = QueryStrategy.Fetch( c => predicate.Compile().Invoke( c.Data ) );

    return result.FirstOrDefault();

}
Run Code Online (Sandbox Code Playgroud)

这补充了现有的Find方法:

public Container Find( Expression<Func<Container , bool>> predicate ) {

    IEnumerable<Container> …
Run Code Online (Sandbox Code Playgroud)

c# linq lambda entity-framework

6
推荐指数
1
解决办法
2412
查看次数

这是否适合使用我的MVC 3 ModelBinder中的服务定位器模式?

我有一个ASP.NET MVC 3应用程序,并使用Ninject将依赖项注入我的类.

控制器上的操作将ViewModel(不包含逻辑)传递给视图层.

当HTTP表单被POST时,MVC 3创建一个ViewModel实例并将传入的POST数据绑定到ViewModel的属性.MVC 3使用名为DefaultModelBinder的类来创建实例并执行绑定.

我的大多数ViewModel都共享一个依赖项,我并不想从每个单独的Controller方法(DRY原则)中设置它.

因此,我创建了一个DefaultModelBinder的自定义子类,如下所示:

using System;

using System.Web.Mvc;

namespace Application.Classes {

    public sealed class CustomModelBinder : DefaultModelBinder {

        private readonly IDependencyResolver DependencyResolver;

        public CustomModelBinder( IDependencyResolver dependencyResolver ) {

            DependencyResolver = dependencyResolver;

        }

        protected override object CreateModel( ControllerContext controllerContext , ModelBindingContext modelBindingContext , Type modelType ) {

            return DependencyResolver.GetService( modelType );

        }

    }

}
Run Code Online (Sandbox Code Playgroud)

我已将其设置为替换DefaultModelBinder,如下所示(在Global.asax.cs中):

protected void Application_Start() {

    // ...

    ModelBinders.Binders.DefaultBinder = new CustomModelBinder( DependencyResolver.Current );

    // ...

}
Run Code Online (Sandbox Code Playgroud)

通过在Controller方法接收ViewModel时执行此操作,它将是由Ninject使用我在NinjectModule中指定的绑定构建的.ViewModel现在接收注入其构造函数的依赖项.

这是否适合使用服务定位器模式?

澄清/更新:

c# design-patterns ninject asp.net-mvc-3

4
推荐指数
1
解决办法
452
查看次数

Linq Entity Framework通用过滤方法

我有一些方法对我的实体的数据执行标准过滤(使用Entity Framework v4).

示例#1:

protected IQueryable<Database.Product> GetActiveProducts( ObjectSet<Database.Product> products ) {

    var allowedStates = new string[] { "Active" , "Pending" };

    return (
        from product in products
        where allowedStates.Contains( product.State )
            && product.Hidden == "No"
        select product
    );

}
Run Code Online (Sandbox Code Playgroud)

示例#2:

protected IQueryable<Database.Customer> GetActiveProducts( ObjectSet<Database.Customer> customers ) {

    var allowedStates = new string[] { "Active" , "Pending" };

    return (
        from customer in customers
        where allowedStates.Contains( customer.State )
            && customer.Hidden == "No"
        select customer
    );

}
Run Code Online (Sandbox Code Playgroud)

如您所见,这些方法与它们运行的​​实体类型完全相同.我有超过10种这样的方法,一种用于我系统中的每种类型的实体.

我试图理解我如何能够在任何实体类型中传递1个单一方法,并且如果存在2个字段/属性,则让它执行where子句.

我不在数据库中使用继承,因此就系统而言,每个实体类型都有"隐藏"和"状态"字段是巧合.

我的谷歌搜索告诉我它与使用Expression.Call()构建代码有关,但我的头现在正在旋转!

c# linq-to-entities entity-framework

3
推荐指数
1
解决办法
3980
查看次数

这是具体的参数化类型吗?

如果我理解正确的话,以下是通用类型:

class Example<T> {}
Run Code Online (Sandbox Code Playgroud)

以下是具体参数化类型:

Example<String>
Run Code Online (Sandbox Code Playgroud)

以下不是具体参数化类型:

Example<? extends Number>
Run Code Online (Sandbox Code Playgroud)

鉴于以下内容,有人可以向我解释 Example 是否是具体参数化类型?

Example< OtherExample<? extends Number> >
Run Code Online (Sandbox Code Playgroud)

如果它不是具体的,那么是否可以说如果类型参数本身是通配符,或者任何嵌套类型参数是通配符,那么最外层的类型因此不是具体的?

更新

我现在意识到术语“具体参数化类型”可能不是官方的 Java 术语。

我从以下来源获取它:http://www.angelikalanger.com/GenericsFAQ/FAQSections/ParameterizedTypes.html#Topic2

结论

我被说服了:

Example< OtherExample<? extends Number> >
Run Code Online (Sandbox Code Playgroud)

是具体参数化类型(就 GenericsFAQ 的术语而言),因为它不直接包含通配符(“?”),并且可以与“new”关键字一起使用。

谢谢!

java

3
推荐指数
1
解决办法
611
查看次数