使用ASP.NET开发遵循HTML/XHTML+CSS规范的的Web应用

HTML&CSS设计与构建网站(一) 本篇文章告诉您 一个Web应用是如何运转的? 程序员怎么样去通过HTML+CSS构建一个网站的 阅读详情
系统从外到内可以分为:
  • Web应用层
作用:从.NET Framework得到客户端的Http请求,并向.NET Framework输出页面的HTML代码
内容:ASP.NET窗体、ASP.NET用户控件(UserControl)以及其他页面所需要的资源
  • 控件层
作用:为应用层提供通用的界面控件,管理其内部控件并对外输出其自身的HTML代码
内容:ASP.NET Web自定义控件
  • 业务层
作用:向界面层(Web应用及控件)提供业务接口,直接或间接与数据库交互传递数据
内容:数据访问类或OR Mapping实现

本文探讨Web应用层的实现,主要目标包括:
  1. 提供模板页布局支持
  2. 对页面输出的HTML代码进行优化,做到数据和外观分离——也就是遵循基于HTML/XHTML+CSS的网页规范
因此,本文不涉及业务层的实现方法。

对于第1点,目前成熟的MasterPage模板页控件能够满足这方面的需求。同时,我们还可以对其做进一步扩展:在一个Web应用中建立多套模板页布局,通过配置文件实现选择性使用。
实现方法——
  1. 派生MasterPage控件
  2. 重写其TemplateFile属性的get方法,根据配置文件中指定的目录名称动态生成控件访问模板页文件的路径

对于第2点,首先要指出:ASP.NET控件模型以及已有的第三方控件在HTML/XHTML+CSS规范方面做得很差。
凡是功能比较完善的控件(比如Infragistics),为了使界面样式美观,在输出的HTML代码中混合了大量的外观样式。这直接导致了生成的页面体积庞大,数据不宜抽取(对搜索引擎不友好)。
在通常情况下,由于控件的外观是由使用控件的开发人员在设计时指定,Web设计人员无法控制其最终的输出效果,并且很难保证不同开发人员使用的控件保持一致的外观界面。
基于这些原因,使我在目前的项目中放弃使用这些功能强大的第三方控件,而由开发人员自行开发所需的界面控件——这些控件在界面实现的底层做到数据和外观分离。
比如:当界面需要输出一个搜索结果列表,现有的做法是使用DataList或DataGrid控件,根据需要定义记录行/列的模板内容及其样式。这样在客户端便得到了类似这样的HTML代码(假设数据由3条含有3个字段的记录组成,并省略服务器端控件生成的id属性):
<table width="..." cellpadding="..." cellspacing="..." border="...">
  
<tr>
    
<td style="background-color:#XXXXXX;"><a href="...">产品名称1</a></td><td style="background-color:#XXXXXX;">价格1</td>
  
</tr>
  
<tr>
    
<td colspan="2" style="background-color:#XXXXXX;">简介1</td>
  
</tr>
</table>
<table width="..." cellpadding="..." cellspacing="..." border="...">
  
<tr>
    
<td style="background-color:#XXXXXX;"><a href="...">产品名称2</a></td><td style="background-color:#XXXXXX;">价格2</td>
  
</tr>
  
<tr>
    
<td colspan="2" style="background-color:#XXXXXX;">简介2</td>
  
</tr>
</table>
<table width="..." cellpadding="..." cellspacing="..." border="...">
  
<tr>
    
<td style="background-color:#XXXXXX;"><a href="...">产品名称3</a></td><td style="background-color:#XXXXXX;">价格3</td>
  
</tr>
  
<tr>
    
<td colspan="2" style="background-color:#XXXXXX;">简介3</td>
  
</tr>
</table>

当我们遵循HTML/XHTML+CSS规范自行开发开发界面控件,同样的数据,所得到的结果就会变成:
<dl>
  
<dt><a class="name" href="...">产品名称1</a><span class="price">价格1</span></dt>
  
<dd><p>简介1</p></dd>
  
<dt><a class="name" href="...">产品名称2</a><span class="price">价格2</span></dt>
  
<dd><p>简介2</p></dd>
  
<dt><a class="name" href="...">产品名称3</a><span class="price">价格3</span></dt>
  
<dd><p>简介3</p></dd>
</dl>
而这些数据所呈现的外观,已经由web设计人员使用css样式表做了定义,上面的代码中所指定的元素tag以及class属性,都是已经定义好的。控件开发人员必须按照这些约定输出HTML代码。
asp.net 和 css样式大全 详细介绍了css样式的属性 并有css实例讲解 堪称css样式大全 立即下载

相关推荐

如何用YOLOv5改进无人机小目标检测?MFFSODNet实战教程(附代码)

本文详细介绍了如何利用YOLOv5框架结合MFFSODNet网络结构优化无人机航拍图像中的小目标检测。通过引入微小目标预测头、多尺度特征提取模块(MSFEM)和双向密集特征金字塔网络(BDFPN)等核心技术,显著提升了小目标检测精度。文章提供了完整的代码实现方案,并展示了在农业监测、电力巡检等实际场景中的应用效果。

sre5engineer的博客 739

2022年8月9日:使用 ASP.NET Core 为初学者构建 Web 应用程序--使用 HTML、CSS 和 Javascript 构建简单的网站

通过了解如何使用 HTML、CSS 和 JavaScript 构建网站开始 Web 开发,以及使用浏览器中的开发人员工具检查你的工作。

DXB2021的博客 1826

stm32控制舵机_使用URT-1控制飞特舵机上手教程(SM40BL舵机为例)

使用URT-1控制飞特舵机上手教程(SM40BL舵机为例):1,参阅URT-1使用说明.pdf2, 材料清单:① URT-1驱动板② 连接驱动板与电脑的MINI USB 连接线③ 给舵机供电的电源④ 舵机与舵机连接线⑤ 杜邦线(可选)3,将URT-1驱动板与电脑连接4,安装驱动,参阅文件CH340驱动,检查设备管理器串口号。5,舵机连接URT-1驱动板,驱动板接电源,参考下图:6,打开FD软件进行...

weixin_39564510的博客 3432

ASP.NET Web应用中的 Razor Pages/MVC/Web API/Blazor

大多数服务器端语言都采用广泛使用的模型-视图-控制设计。它由三个主要组件组成:控制器、模型和视图。控制器负责输入并与模型和视图交互。视图负责用户界面,模型代表业务逻辑和数据。虽然 MVC 模型适用于 API 开发,但 Razor Pages 专注于页面而不是 API。如果您打算使用 Angular 或 React 等前端框架,那么 MVC 将是一个合适的选择。Razor Pages 是允许轻松加载数据的网页,类似于 HTML 页面。它们与 ASP.NET MVC 的视图组件非常相似,具有相同的语法和功能。

学以致用 知行合一 2264

Win10 IPv6 远程桌面连接(小米路由器)

背景 由于家里是移动网,且懒得向运营商要公网IPv4,所以想着用IPv6试一下。 家里的环境是这样的: 宽带用的是移动的,没有公网IPv4,但经过测试发现IPv6是公网的 上网通过光猫拨号,而不是通过路由器 路由器是小米AC2100 光猫更改为桥接模式 路由器必须要通过PPPoE拨号,如果是光猫拨号,那么要找对应的维护人员辅助你把光猫改成桥接模式。通过PPPoE拨号路由器就能够拿到公网的IPv6网段,也就可以给底下的其他服务分配公网IPv6了。而如果是光猫拨号,那么只有路由器可以拿到公网的IP。其他的设

timczm的博客 1万+

百度百科 X-Bk-Token 算法还原

百度百科 X-Bk-Token 算法还原

自成背后的博客 1万+

ASP.NET HTML前端与后台交互

开发环境:VS2012 操作系统:WIN7 框架版本:.NET Framework4.5 1.前端关键代码 2.后台关键代码(项目添加文件“Handler1.ashx”) 3.效果

u014080486的博客 2205

【ArcGIS Engine二次开发】入门基础(2):ArcGIS开发方式(VBA、DLL、Add-in、Engine)对比

文章目录2.1 使用VBA进行桌面软件开发2.1.1 VBA开发方式2.1.1 VBA代码的安全性2.2 使用DLL进行桌面软件开发2.2.1 DLL开发方式2.2.2 DLL功能的应用部署2.3 使用Add-in进行桌面软件开发2.4 使用ArcGIS Engine构建独立应用程序 对于桌面GIS应用来说,ArcGIS平台不仅提供了用于开发独立运行的GIS应用软件的二次开发工包ArcGIS Engine,还提供了对ArcGIS Deskop桌面软件进行扩展的开发的话,在开发个具体的GIS 行业应用软件时

智慧空间实验室 6510

asp.net前端html,ASP.NET-前端-Html基础

HTML 是用来描述网页的一种语言。HTML 指的是超文本标记语言 (Hyper Text Markup Language)HTML 不是一种编程语言,而是一种标记语言 (markup language)标记语言是一套标记标签 (markup tag)HTML 使用标记标签来描述网页HTML 标签HTML 标记标签通常被称为 HTML 标签 (HTML tag)。HTML 标签是由尖括号包围的关键...

weixin_34401851的博客 532

[低代码 + AI] 明道云与 Dify 的三种融合实践方式详解

融合方式技术路径优点局限或注意事项UI 嵌入iframe 表单嵌入快速集成、用户体验一致无法自定义交互逻辑明道云调用 DifyAPI 请求节点工作流自动化、逻辑灵活有 timeout 限制、需优化 promptDify 调用明道云插件或 API 调用节点可查询实际业务数据、增强 AI 智能需理解明道云 API 结构、权限设置复杂明道云与 Dify 的结合为低代码平台注入了智能动力。

技术小甜甜:传播可落地技术,帮助个人和企业降低解决真实场景问题的成本 1187

智能车图像处理14-进阶篇6--坡道的判定

这篇文章主要讲述智能车图像处理中 : 如何判断坡道

taiyuezyh的博客 9231

XHTML Strict和Transitional 的区别

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33713350的博客 252

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Html 中 XHTML Strict 和 Transitional 的区别

今天在给一个静态的网页写程序的时候发现了一点问题,静态的时候样式是正常的,但是换成ASP.NET程序 aspx 格式的时候,样式就变了,于是找啊找,找啊找,终于发现问题所在了,原来是这个的问题。 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtm...

a495023351的博客 579

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

从零开始学web开发之html5-h5概述

前言 为了掌握多一门技术,于是开始了学习前端技术的脚步。虽然安卓还是没有深入地学习一些比较高端的知识,比如view绘制原理,事件分发机制,属性动画的绘制。没有深入地研究一些流行框架,最遗憾的是没有将rxjava应用到自己的工作中,更加没有学习kotlin,还有好多好多安卓技术没有吃透。 但现在学习前端技术是比较紧急的事情,一是webapp的发展趋势越来越好,势必影响到移动端的开发;二是感觉跨平...

pigdreams的博客 1658

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

学习ASP.NET之前,先了解它

ASP.NET是一个使用HTML,CSS,JavaScript和服务器脚本构建的网页和网站的开发框架,不是一门编程语言.        ASP.NET支持三种不同的开发模式:Web Pages(Web页面),MVC(Model .View.Controller模型-视图-控制器 ),Web Forms(Wen窗体)        ASP.NET是有微软在.NET Framwork框架中所提供,

JakeyYe的博客 261

《ASP.NET程序设计教程》目录

《ASP.NET程序设计教程》目录 前 言·· I1 致学生——如何学习软件技术·· I(1)“务于精熟”与“观其大略”的两种学习策略·· II(2)学会利用互联网·· II(3)将软件开发实践与软件开发理论结合起来·· II2 致教师——关于本课程的教学方法·· III3 本书主要内容·· III4 本书软件环境说明·· IV5 本书示例网站与数据库的

bitfan(数字世界一凡人)的专栏 4547

简简单单学习ASP.NET之一

第一章 WEB开发基础 本章概要: 本章主要阐述了进行WEB开发所需要必备的技术储备(XHTML/JavaScript/CSS)。 XHTML、CSS、JavaScript是DHTML的基本组成部分,它们以成为现代网页设计中必不可少的关键要素。但是由于种种原因,真正精通XHTML/JavaScript/CSS却绝非易事。在使用与开发网站时,会遇到形形色色的问题,而解决方案又五花八门,往...

weixin_30919235的博客 300

【Web前端学习进阶】HTML的规范使用和详解

万维网W3C标准中网页分为结构,表现和行为三部分,HTML用于描述页面的结构,CSS用于控制页面中的元素样式,JavaScript用于响应用户的操作。HTML,CSS和JavaScript组成了前端技术栈。学习HTML就是学习标签的一个过程,难度指数低,重在反复练习!

HTML网页设计 1090

那些让 Web 开发者们深感意外的事情

作为 Web 开发者,对自己的行业前景,人人都有自己的看法,然而,任何行业都有出人意料的地方。著名的 Web 开发设计博客 Nope.com 曾向他们的读者做了一个调查,请他们列举 Web 开发领域那些让他们感到意外的事情,收到了各种各样的反馈,本文就是这次调查的结果与分析。 一个真正的符合 Web 标准的 IE 这个消息让我们振奋,在经过 9 个版本更替后,我们终于看到了(或者说即将看到...

weixin_42508242的博客

ASP.NET 2.0 - 页面设计

学习目标l  创建并布局静态页面;l  VS中的HTML和HTML查看器;l  服务器控件和动态内容;l  在设计视图中配置控件;l  在web控件库中的可用控件;l  向页面添加动态导航控件,并且使它们投入工作而无需写下一行代码。 静态页面写成之后其内容就固定下来,不会随着用户的输入或者周遭的环境而变化。HTML文件是由浏览器来理解并且将括号中的那些东东转

SAGITTARIUS_PIG的专栏 1494
上一篇: HTML+CSS实现圆角矩形(不需要图片)——抄自GTalk
下一篇: ASP.NET是微软继MFC之后最无用的框架
uno
uno
博客等级 码龄26年 14粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值