4-11总结

本文探讨了网页布局技术,包括使用margin-left实现元素移动、生成滚动条的方法、解决jqueryUI拖拽重叠问题,以及.netcore环境下Nlog日志组件的配置与使用。同时,还介绍了ADO.NET中ExecuteScalar()的返回值处理与查询XML格式数据的技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.网页如何做出向左移动的效果
使用margin-left,设置未负值。
举例父div宽高设置400px,300px,子div宽高设置1000px,300px
此时在宽度上。子div超过了父亲,把父div设置overflow:hidden;超出不可见。
然后设置子div的margin-left为负值,此时就有向左移动的效果。

可以设置按钮或者滑块记录margin-left的值来进行导航。
一般最小值是0.
最大值是1000px-400px=600px 剩下的举例和一屏的父宽度一致即可。

2.网页产生滚动条
   首先父元素需要设置 overflow: scroll,
   具体overflow-x,overflow-y:

   当自己长度或者高度超出父元素,父元素有设置超出滚动,则出现滚动条。
   .p::-webkit-scrollbar{display:none;}可以隐藏滚动条,
   然后通过按钮或者滑块设置scrollleft 或者scrolltop来达到滚动的效果。

3.jquery ui 拖拽的块怎么能不重叠
首先我的思路是按照x,y,flag这种模式进行初始化,判断,后来发现行不通。
复杂而且不可靠。
更好的思路:
1.start事件记录滑块开始的位置left,top,width,height
2.stop事件记录结束的位置left,top,width,height,
3.使用.bar 进行each循环找到这个类的每一个进行比较,left,top,width,height,
如果重叠,则使用start记录的数据把滑块送到开始的位置。

这个问题转化成一个更一般的问题,2个块,有left,top,width,height,
怎么判断这2个块是否有部分重叠?这个根网页没有关系,纯粹是逻辑的判断,
我一开始认为这根本不可能。事实上,是可以的。

这个涉及到计算机图形学2个矩形是否重叠的问题?
 var lh = Math.max(now.top + now.height - one.top, one.top + one.height - now.top);
 var lw = Math.max(now.left + now.width - one.left, one.left + one.width - now.left);
 if (lh < now.height + one.height && lw < now.width + one.width) {
    return true;
 }

4.Nlog日志
.net core 默认有日志从控制台输出,使用Nlog组件把控制台日志输出到文件。

Nuget下载:

NLog.Web.AspNetCore 4.8 
创建配置文件 nlog.config 设置属性:复制到输出目录,始终覆盖

 <?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      autoReload="true"
      throwConfigExceptions="true"
      internalLogLevel="info"
      internalLogFile="d:\log\internal-nlog.txt">

  <!-- the targets to write to -->
  <targets>
    <!-- write logs to file  -->
    <target xsi:type="File" name="allfile" fileName="d:\log\nlog-all-${shortdate}.log"
            layout="${longdate}|${event-properties:item=EventId_Id:whenEmpty=0}|${uppercase:${level}}|${logger}|${message} ${exception:format=tostring}" />

    <!-- another file log, only own logs. Uses some ASP.NET core renderers -->
    <target xsi:type="File" name="ownFile-web" fileName="d:\log\nlog-own-${shortdate}.log"
            layout="${longdate}|${event-properties:item=EventId_Id:whenEmpty=0}|${uppercase:${level}}|${logger}|${message} ${exception:format=tostring}|url: ${aspnet-request-url}|action: ${aspnet-mvc-action}|${callsite}" />
  </targets>

  <!-- rules to map from logger name to target -->
  <rules>
    <!--All logs, including from Microsoft-->
    <logger name="*" minlevel="Trace" writeTo="allfile" />

    <!--Skip non-critical Microsoft logs and so log only own logs-->
    <logger name="Microsoft.*" maxlevel="Info" final="true" />
    <!-- BlackHole -->
    <logger name="*" minlevel="Trace" writeTo="ownFile-web" />
  </rules>
</nlog>


启动调用日志组件。Program.cs 
public static IWebHost BuildWebHost(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .UseStartup<Startup>()
                .UseNLog() //日志
                .Build();

其他版本配置文件:(简单)
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <targets>
        <target name="console" xsi:type="Console" />
        <target name="debugger" xsi:type="Debugger" layout="${date:format=HH\:mm\:ss.fff}: ${message}" />
        <target name="error_file" xsi:type="File"
                        fileName="${basedir}/Logs/Error/${shortdate}/error.txt" maxArchiveFiles="30"
                        layout="${longdate} | ${level:uppercase=false} | ${message} ${onexception:${exception:format=tostring} ${newline} ${stacktrace} ${newline}" />
    </targets>
    <rules>
        <!--<logger name="*" writeTo="console" />-->
        <logger name="*" minlevel="Debug" writeTo="debugger" />
        <logger name="*" minlevel="Error" writeTo="error_file" />
    </rules>
</nlog>
 

5.ado.net 问题
ExecuteScalar() 返回单个值
如果sql语句中没有select语句,则返回的值是空。也就是c#的null.
如果null,则不能执行后续的操作比如tostring()

所以执行ExecuteScalar(),不管正确,还是错误最好都有返回值。
否则需要对结果进一步判断。

填充datatable也有类似的问题。
先创建一个datatable=new datatable()
这样可以判断datatable.rows这类判断有没有数据。

6.使用查询xml格式的数据。

DECLARE @xml xml
SELECT top 1  @xml=Bas_Workflow.WorkflowDesigner
FROM Bas_MO_Item_Plan_Detail
LEFT JOIN Bas_Workflow ON Bas_MO_Item_Plan_Detail.WorkflowId =Bas_Workflow.WorkflowId

SELECT  
Item.query('./Text').value('.','nvarchar(50)') AS 'OpCode'
from @xml.nodes('/Diagram/Nodes/Node') AS UT(Item)

函数:
query()
value()
.代表取单个值,否则xml会返回一个集合。
@代表属性

7..net core 网站图标问题
    1.如果favicon.ico 放在wwwroot位置,然后Startup类的Configure方法中调用app.UseStaticFiles()方法。
    app.UseStaticFiles(new StaticFileOptions
            {
                //不能识别的文件,作为图片处理
                ServeUnknownFileTypes = true,
                DefaultContentType = "image/png"
            });

这是不必添加
<link rel="shortcut icon" href="favicon.ico" type="image/x-icon" />
页面可以看得到。
但是网站发布之后,图标404找不到了。

手动添加,然后使用@url.content()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值