小编gro*_*kky的帖子

RenderSection()是否可以在ASP.NET Core的<environment>标记帮助器内工作?

布局有这个:

<!DOCTYPE html>
<html>
<head>
  <environment names="Development">@RenderSection("devCss", required: false)</environment>
  <environment names="Staging,Production">@RenderSection("staproCss", required: false)</environment>
</head>
<body>
  @RenderBody()
  <environment names="Development">@RenderSection("devJs", required: false)</environment>
  <environment names="Staging,Production">@RenderSection("staproJs", required: false)</environment>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

视图有这个:

@section devCss { <link rel="stylesheet" href="foo.css" asp-append-version="true" /> }
@section staproCss { <link rel="stylesheet" href="foo.min.css" asp-append-version="true" /> }
@section devJs {}
@section staproJs {}

<h1>hello</h1>
Run Code Online (Sandbox Code Playgroud)

当标签RenderSection()外时<environment>,一切正常。

在内部时,如上例所示,它失败并显示无用的错误 InvalidOperationException: The following sections have been defined but have not been rendered by the page at '_Layout.cshtml': 'staproCss, staproJs'. To ignore an …

c# asp.net razor tag-helpers asp.net-core

4
推荐指数
2
解决办法
6519
查看次数

如何使用EF Core整合迁移?

我有这些迁移:

00000000000000_First
20161101000000_Foo
20161102000000_Bar
// ...many many MANY more
20161108000000_Baz
Run Code Online (Sandbox Code Playgroud)

我想从整合FooBaz到一个新的迁移.我知道如何在EF中这样做,但在EF Core中不知道.

我试过这个:

dotnet ef update database 00000000000000_First
// delete all other migration classes
dotnet ef migrations add Consolidated
dotnet ef update
Run Code Online (Sandbox Code Playgroud)

我希望新Consolidated迁移将包含对模型的所有更改.但它Up()Down()方法都是空的.

我究竟做错了什么?

entity-framework ef-migrations entity-framework-core

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

从异常过滤器重定向

我正在使用ASP.NET Core.我的一个控制器调用服务,抛出各种异常.我想在异常过滤器(而不是中间件)中处理它们.

public class MyHandlerAttribute : ExceptionFilterAttribute
{
    public override void OnException(ExceptionContext c)
    {
      if (c.Exception is FooException) {
          // redirect with arguments to here
      } 
      else if (c.Exception is FooException) {
          // redirect with arguments to there
      }
      else {
          // redirect to main error action without arguments, as 500
      }
      base.OnException(c);
    }
}
Run Code Online (Sandbox Code Playgroud)

与动作过滤器不同,异常过滤器不会让我访问Controller,所以我不能这样做c.Result = controller.RedirectTo...().

那么如何重定向到我的错误操作?

c# asp.net asp.net-core-mvc asp.net-core

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

将html帮助器迁移到ASP.NET Core

我正在将项目转换为ASP.NET Core.我需要迁移大量可重用的html帮助程序,但Core中不存在html帮助程序.

有些很复杂,有些简单.这是一个非常简单的例子:

@helper EditIcon()
{
    <i class="glyphicon glyphicon-pencil"></i>
}
Run Code Online (Sandbox Code Playgroud)

请注意,这只是一个例子.

Point正在编写一个标记助手,因为这是一种巨大的过度杀伤力.部分相同.视图组件也是如此.

我们谈论的是Razor的一小部分内容.什么是我最好的选择?

c# html-helper razor asp.net-core-mvc asp.net-core

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

如何使用标签助手来获取任意元素上的模型属性名称?

ASP.NET 核心。

 <label asp-for="FooModelProperty">...</label>
Run Code Online (Sandbox Code Playgroud)

这会生成一个具有适当属性名称的表单控件。选择、输入等也是如此。

但我需要在某个随机元素上使用该名称,例如 a div,这样我就可以在 JavaScript 中使用它。问题是asp-for标签助手不适用于任意元素。

那么我该怎么做这样的事情:

<div asp-for="FooModelProperty">...</div>
Run Code Online (Sandbox Code Playgroud)

c# asp.net asp.net-core-mvc tag-helpers asp.net-core

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

EF Core是否允许唯一列包含多个空值?

我的实体有一个允许为null的属性.但是,如果它不为null,那么它必须是唯一的.换句话说,该列是唯一的但允许多个空值.

我试过了:

config.Property(p => p.ProductId).IsRequired(false);
Run Code Online (Sandbox Code Playgroud)

我记得在前核心EF中努力工作.

这可能吗?如何配置实体?

c# entity-framework ef-code-first entity-framework-core

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

我可以在 ASP.NET Core 和 EF Core 中安全地使用非通用 DbContextOptions 吗?

在 ASP.NET Core 中,EF Core 上下文是由内置 DI 容器创建的。在官方文档中,上下文是使用泛型创建的DbContextOptions<TContext>

public class MyContext : IdentityDbContext<User> {
  public MyContext(DbContextOptions<MyContext> options, ILogger<MyContext) logger) : base(options) { }
}
Run Code Online (Sandbox Code Playgroud)

然而,也有一些非泛型的例子:

public class MyContext : IdentityDbContext<User> {
  public MyContext(DbContextOptions options, ILogger<MyContext) logger) : base(options) { }
}
Run Code Online (Sandbox Code Playgroud)

从源码来看它们的区别是:

类型参数: TContext:这些选项适用的上下文的类型。

我想使用非泛型类型,因为在我的设计中我有一个抽象上下文,这与 DI 容器不能很好地配合。

那么,如果我使用非泛型类型,这到底意味着什么?我的上下文无法正确配置?

c# asp.net-identity entity-framework-core asp.net-core

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

从 Autofac 函数工厂获取每个请求的依赖关系

我正在使用 ASP.NET Core 和 Autofac。几乎所有内容都是按照生命周期范围(“每个请求”)注册的。所以我的数据库上下文DbContext在整个请求中是同一个实例。

不过我有一个单例,它也依赖于DbContext. 为了避免强制依赖,它被注入为,这意味着每次都有Func<Owned<DbContext>>一个新实例。DbContext

问题是我需要与请求期间其他地方相同的实例,而不是新的实例。

我想避免强制依赖错误,但我也想要相同的实例。可以通过标记或自定义注册实现这一点吗?

c# autofac asp.net-core

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

来自appsettings.json的ASP.NET Core强类型选项

ASP.NET Core的"选项"服务有很多变化.我正在使用最新版本,并且没有任何教程和示例工作了.

为了简单起见,我使用Visual Studio的模板创建了一个新的ASP.NET Core Web应用程序.

我的appsettings.json包含:

"MyConfig": {
  "Foo": "Bar"
}
Run Code Online (Sandbox Code Playgroud)

我的强类型配置对象:

public class MyConfig {
  public string Foo;
}
Run Code Online (Sandbox Code Playgroud)

我的Startup.ConfigureServices包含:

services.AddOptions();
services.Configure<MyConfig>(Configuration.GetSection("MyConfig"));
//services.Configure<MyConfig>(opts => Configuration.GetSection("MyConfig").Bind(opts));  // I also tried this
Run Code Online (Sandbox Code Playgroud)

我的HomeController包含:

public class HomeController : Controller {

  private readonly MyConfig _myConfig;

  public HomeController(IOptions<MyConfig> myConfig) {
    _myConfig = myConfig.Value;
  }

  public IActionResult Index() {
    return Content(_myConfig.Foo);     // Foo is null
  }

}
Run Code Online (Sandbox Code Playgroud)

我的project.json包含:

"Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0",
"Microsoft.Extensions.Configuration.Json": "1.0.0",
"Microsoft.Extensions.Configuration.UserSecrets": "1.0.0",
"Microsoft.Extensions.Options.ConfigurationExtensions": "1.0.0", …
Run Code Online (Sandbox Code Playgroud)

c# asp.net asp.net-core-mvc .net-core asp.net-core

2
推荐指数
1
解决办法
857
查看次数

EF Core帮助程序方法,用于显式加载引用和集合

EF Core支持显式加载。上下文有两个重载,一个重载,一个重载。

有两种方法是没有用的,并且会变得混乱。我想要一个接受两个都作为参数数组的方法。

所以代替这个

await context.Entry(customer).Collection(e => e.Orders).LoadAsync();
await context.Entry(customer).Collection(e => e.Returns).LoadAsync();
await context.Entry(customer).Reference(e => e.Account).LoadAsync();
Run Code Online (Sandbox Code Playgroud)

我想做这个:

await context.Entry(customer).Load(e=>e.Orders, e=>e.Returns, e=>e.Account);
Run Code Online (Sandbox Code Playgroud)

我认为这是可行的,因为有一些类似的东西context.Include(...)可以同时接受集合和引用。

到目前为止,在我的上下文类中:

public async Task Load<TEntity>(TEntity entity, params Expression<Func<TEntity, object>>[] propertyExpressions)
  where TEntity : class
{

  foreach (var propertyExpression in propertyExpressions) {

    var isCollection = typeof(IEnumerable).GetTypeInfo()
                       .IsAssignableFrom(propertyExpression.Body.Type);

    if(isCollection)
    {
      await Entry(entity)
        .Collection(propertyExpression)     // problem is here !!!!!
        .LoadAsync();
    }
    else
    {
      await Entry(entity)
        .Reference(propertyExpression)
        .LoadAsync();
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

问题行显示在上方。输入是object但是.Collection()期望的IEnumerable<TProperty>。 …

c# reflection lambda entity-framework entity-framework-core

2
推荐指数
1
解决办法
555
查看次数