小编Jef*_*ege的帖子

CSS:page-break-before,总是,除了第一次?

我正在尝试创建一个漂亮的打印html页面.我需要在顶级构造之间强制分页,所以我在每个构造的顶级元素中添加了一个CSS类,并设置了page-break-before:总是在该类的CSS中.例如:

<body>
<div class="prettyprint">
    <div class='toplevel'>
        ...
    </div>
    <div class='toplevel'>
        ...
    </div>
</div>
</body>

.prettyprint .toplevel { page-break-before:always; }
Run Code Online (Sandbox Code Playgroud)

我的问题是我在第一个顶级元素之前得到一个空白页面.考虑到以前的分页符号,这是完全合理的:总是应该这样做.但我不想要它.

因此,一个选项是不在第一个元素中包含"toplevel"类,或者提供一个新的"firsttoplevel"类,该类不设置page-break-before:always,并将其设置为第一个顶级元素,然后对所有其他人使用"顶层".我可以轻松地完成它,但似乎它违反了关注点的分离.

所以我想知道在CSS中是否有办法做到这一点?设置一个仅适用于"prettyprint"的第一个"顶级"子项的规则?

任何想法,将不胜感激.

html css page-break

9
推荐指数
2
解决办法
4130
查看次数

为什么编译为x86的.NET EXE作为x64运行?

我有一个简单的小命令行程序,用C#编写,在.NET 4.0下运行,并用Visual Studio 10.0编译.

它的作用是从另一个供应商的Access.mdb文件中提取数据,并将其插入到Sql Server数据库中,这样我们的一个应用程序就可以访问这些数据.

我们使用.NET的OleDbConnection/OleDbCommand/OleDbDataReader类,使用Microsoft.Jet.OLEDB.4.0作为数据提供者.

对我们来说这很好,直到我们试图在64位计算机上运行.事实证明,.NET没有64位OleDb提供程序.对于分散在整个网络上的问题,有一些模糊的,半透明的线索,讨论了不同版本的Access,或MDAC,或Office,或其他什么,这些都使得某些人能够运行.

我们所做的是将项目配置为目标x86.问题就消失了.

现在它回来了,原因我根本就不明白.当我在本地机器上构建程序时,它运行为x86,但是当我在构建机器上构建它时,它运行为x64.

项目文件明确配置为以x86为目标:

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
    <DebugType>pdbonly</DebugType>
    <Optimize>true</Optimize>
    <OutputPath>bin\Release\</OutputPath>
    <DefineConstants>TRACE</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
    <PlatformTarget>x86</PlatformTarget>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)

它是从同一个批处理文件构建的,无论是在我的机器上还是在构建机器上:

msbuild OurApp.sln /property:Configuration=Release
Run Code Online (Sandbox Code Playgroud)

生成的exes 表示它们是x86,无论它们是在哪台机器上构建的.如果我在其中任何一个上运行dumpbin/headers,我会看到:

FILE HEADER VALUES
         14C machine (x86)
           3 number of sections
    4FBA64C8 time date stamp Mon May 21 10:52:40 2012
           0 file pointer to symbol table
           0 number of symbols
          E0 size of optional header
         102 characteristics
               Executable
               32 bit word machine
Run Code Online (Sandbox Code Playgroud)

在我的机器上构建的exe的转储和在构建机器上构建的exe 的唯一区别是时间戳和.pdb文件的路径.

但是,这是奇怪的事情,在我的机器上构建的exe运行得很好,一个构建在构建机器上的错误与我们在将它构建为x64时看到的相同错误消息错误.

更重要的是 - …

.net 64-bit x86 visual-studio-2010 windows-7

9
推荐指数
1
解决办法
2091
查看次数

在单元测试中使用DI容器

我们一直在使用Simple Injector取得了很好的成功,在一个相当实际的应用程序中.我们一直在为所有生产类使用构造函数注入,并配置Simple Injector来填充所有内容,而且一切都很好.

但是,我们没有使用Simple Injector来管理单元测试的依赖树.相反,我们一直在手动创新.

我花了几天时间完成了一次重大的重构,几乎所有的时间都是在我们的单元测试中修复这些手动构造的依赖树.

这让我感到疑惑 - 是否有人使用任何模式来配置他们在单元测试中使用的依赖树?对我们来说,至少在我们的测试中,我们的依赖树往往相当简单,但有很多.

任何人都有他们用来管理这些的方法吗?

c# unit-testing dependency-injection ioc-container simple-injector

9
推荐指数
2
解决办法
7376
查看次数

WPF是否等同于DOM资源管理器?

当我在网页上绘制布局时,使用CSS,可能存在许多分散在数十个文件中的规则,这些规则可能会影响元素的实际显示方式.这就是为什么DOM探索者是如此关键的工具 - 我可以在浏览器上选择一个元素,并确切地看到CSS规则应用于它.

在WPF中,可以再次存在许多规则 - 样式和模板以及从代码隐藏注入的内联属性和设置 - 可能会相互作用以确定给定元素的显示方式.

有没有办法让我看一个元素,比如一个ComboBox,并快速确定为什么它绘制的高度是我认为应该的三倍?

.net wpf

8
推荐指数
1
解决办法
841
查看次数

WPF:在用户控件中设置键盘焦点?(KeyBinding的问题)

我有一个应用程序有一个主窗口,其中包含一堆东西.用户有时会做一些事情以响应我想要在主窗口中完全显示其他内容,暂时隐藏其中的内容.

我这样做是通过使主窗口中最外层的元素成为没有定义行或列的网格.然后,网格中的每个元素将完全填充网格中的单个单元格,并在其他单元格的顶部绘制.

然后,我常规的东西是在网格的第一个元素中,而我临时的东西是UserControl作为网格的第二个元素,通常设置为Visibility = Collapsed.

除了KeyBinding,一切正常.当在常规的一堆东西中触发适当的命令时,UserControl上的可见性被设置为Visible,并且它完全覆盖了常规的一堆东西.当用户点击UserControl上的关闭按钮时,它的可见性再次被设置为Collapsed,它会消失并显示常规的一堆内容.

我的问题在于KeyBindings.我在UserControl上定义了一些 - 不应该在主窗口上定义 - 它们不起作用.或者更确切地说,一旦我在UserControl中单击它们就可以正常工作,但是直到我这样做它们才能正常工作.

一旦UserControl可见,我就需要它们工作,而不需要用户单击或选项卡进入UserControl.

我的猜测是这与键盘焦点有关 - 但我一直无法找到一种方法来将焦点设置在UserControl上.这是事物 - UserControl中唯一的元素是一个选项卡控件,其所有选项卡都是通过模板动态构建的.编译时没有已知的元素可以显式引用并传递给KeyBoard.Focus().

那么,我是否正确地认为缺乏引起问题的焦点?如果是这样,当我甚至不知道有多少个选项卡时,如何将焦点设置为TabControl中的元素,更不用说选择哪个?

wpf xaml focus

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

是否可以在 razor 页面和 MVC 之间共享 _Layout.cshtml?

假设我有一个 .net 5.0 网站,其中既有 Razor 页面又有 MVC 页面。

也就是说,在 Startup.Configure 中,我有:

app.UseEndpoints(endpoints =>
{
    endpoints.MapRazorPages();
    endpoints.MapControllers();
    endpoints.MapControllerRoute("default", "{controller=Home}/{action=Index}");
});
Run Code Online (Sandbox Code Playgroud)

我有一些页面,例如:

  • /Pages/MyRazorPage.cshtml
  • /Pages/MyRazorPage.cshtml.cs

其他人喜欢:

  • /控制器/MyMvcController.cs
  • /Views/MyMvc/Index.cshtml

有没有办法让它们使用相同的布局?

在 /Pages/Shared/_Layout.cshtml 中创建一个 Razor 布局并在 /Views/Shared/_Layout.cshtml 中创建另一个 Razor 布局似乎很简单,但是如果您想为两种类型的页面拥有相同的布局,这似乎违反了不要重复自己的原则。

有没有办法在两种类型的页面之间共享单一布局?


正如后续操作一样 - 将 /Pages/Shared/_Layout.cshtml 复制到 /Views/Shared/_Layout.cshtml (并确保设置 /Views/_ViewStart.cshtml)可以工作,但 asp 页面助手不起作用。使用普通的 href= 设置 URL 效果很好。

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

8
推荐指数
1
解决办法
1249
查看次数

ASP.NET代码隐藏中的当前工作目录 - 我们可以依赖它吗?

我们可以依赖ASP.NET代码隐藏中的当前工作目录吗?或者,换句话说,我们可以使用相对路径,并确保它们可以工作吗?

如果在网站的一个页面中,我将当前工作目录设置为特定的,那么下次加载网站上的另一个页面时它是否仍然相同?加载网站上的同一页面时?

如果我将当前工作目录设置为特定的,在Page_Load()中,我可以确定在调用Page_PreRender()时它仍然是相同的吗?或者同一网站上的另一个页面可以在我之间进行更改吗?同一个应用程序池中不同网站上的页面是否会改变它?在不同的应用程序池中的不同网站中的页面?

换句话说,IIS中当前工作目录的范围是什么?它是否特定于页面?它是否特定于网站?或者它是在应用程序池中的所有页面之间共享的?

在页面,网站,应用程序池和服务器之间的哪些边界隔离了当前工作目录的不同值?

asp.net iis

7
推荐指数
2
解决办法
9940
查看次数

根据DataContext的类型选择用户控件

我正在尝试在WPF中构建一组典型的CRUD维护表单 - 除了它们在不同的数据库记录上工作之外几乎相同.

我没有为每个创建一个新的窗口类,而是尝试使用单个窗口类,该窗口类使用不同的ViewModel类为每个数据库表实例化,并且我为每个ViewModel定义了不同的UserControl.

因此,如果我将其DataContext设置为Record1ViewModel实例的窗口实例化,我想使用Record1UserControl在窗口中显示它,如果它设置为Record2ViewModel的实例,我想使用Record2UserControl显示它.

我已经验证了两个用户控件都可以正常工作,只需在窗口的XAML中直接定义它们.但是我根本没有想出如何根据ViewModel的类型选择其中一个.

这不起作用:

<myWindow.Resources>

    <DataTemplate x:Key="{x:Type ViewModels:Record1ViewModel}">
        <MaintenanceControls:Record1 />
    </DataTemplate>
    <DataTemplate x:Key="{x:Type ViewModels:Record2ViewModel}">
        <MaintenanceControls:Record1 />
    </DataTemplate>

</myWindow.Resources>

<ContentPresenter Content="{Binding}" />
Run Code Online (Sandbox Code Playgroud)

我在ContentPresenter中得到的是该类型的名称.不使用DataTemplates.

有任何想法吗?

wpf xaml

7
推荐指数
1
解决办法
2423
查看次数

在字符串上构建表达式时如何实现LessThan等

我有一个包,我正在构建表达式树,通过PredicateBuilder与EntityFramework一起使用:

public Expression<Func<T, bool>> constructaPredicate<T>(ExpressionType operation, string fieldName, Expression value)
{
    var type = typeof(T);
    var parameter = Expression.Parameter(type);
    var member = Expression.PropertyOrField(parameter, fieldName);
    Expression comparison = Expression.MakeBinary(operation, member, value);
    var expression = Expression.Lambda<Func<T, bool>>(comparison, parameter);
    return expression;
}
Run Code Online (Sandbox Code Playgroud)

这种方法很好,除了比较字符串和GreaterThan等.在这种情况下,我得到一个例外:

The binary operator GreaterThan is not defined for the types 'System.String' and 'System.String'.
Run Code Online (Sandbox Code Playgroud)

这很简单.浏览一下,我发现只有少数几个引用这个问题,而且在我正在做的事情中没有.

当然,问题是没有String.GreaterThan方法.通常的答案是使用String.CompareTo(),但我还没弄清楚如何使这项工作.

我一直在尝试使用带有methodinfo对象的Expression.MakeBinary的重载,但我还没弄明白.

救命?

添加

所以,我试过特殊情况下String.GreaterThan等,我仍然得到同样的错误:

Expression comparison = null;

if (value.Type == typeof (string))
{
    if (operation == ExpressionType.GreaterThanOrEqual ||
        operation == ExpressionType.GreaterThan ||
        operation == …
Run Code Online (Sandbox Code Playgroud)

c# linq expression-trees

7
推荐指数
1
解决办法
2613
查看次数

使用basicHttpBinding的WCF服务仍然发送内容类型"text/xml"

我正在编写一个在IIS上运行的WCF服务,我有一个客户,其客户端只能与SOAP 1.1交谈.

除此之外,他们需要内容类型为"application/soap + xml; charset = utf-8".我的WCF服务正在发送"text/xml; charset = utf-8".

正在尝试编写客户端的客户转发了一条错误消息:

HTTP 415:无法处理消息,因为内容类型为'text/xml; charset = utf-8'不是预期的类型'application/soap + xml; 字符集= utf-8的

浏览网络时,我发现了许多类似的博客页面:WCF错误 - 请求因HTTP状态415而失败.

这让我觉得从wsHttpBinding切换到basicHttpBinding会解决这个问题.所以我更改了web.config中的绑定,并修改了我自己的测试客户端,以显式创建一个带有BasicHttpBinding的端点.这一切都运行良好,在我自己的测试中(在Visual Studio的Dev Server中运行服务,在我自己的机器上的IIS7中运行它,并在我们的一个测试服务器上的IIS6中运行它.)

但在我向顾客提出要求之前,让他们看看我的改变是否会对他们起作用之前,我向Fiddler开火,以窃听实际的流量.

据Fiddler说,我还在发送"text/xml; charset = utf-8".

那么,我该如何解决这个问题呢?

<system.serviceModel>
    <services>
        <service behaviorConfiguration="myBehavior" name="myName">
            <endpoint 
                    address=""
                    binding="basicHttpBinding" 
                    behaviorConfiguration="flatWsdlFileEndpointBehavior" 
                    bindingNamespace="http://myNamespace"
                    contract="myContract">
                <identity>
                    <dns value="localhost"/>
                </identity>
            </endpoint>
            <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
        </service>
    </services>
    <behaviors>
        <serviceBehaviors>
            <behavior name="myBehavior">
                <serviceMetadata httpGetEnabled="true"/>
                <serviceDebug includeExceptionDetailInFaults="true"/>
            </behavior>
        </serviceBehaviors>
        <endpointBehaviors>
            <behavior name="flatWsdlFileEndpointBehavior">
                <wsdlExtensions location="myUrl" singleFile="true" />
            </behavior>
        </endpointBehaviors>
    </behaviors>
    <bindings>
        <basicHttpBinding>
        </basicHttpBinding> …
Run Code Online (Sandbox Code Playgroud)

wcf soap

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