.net core 模板引擎-net装饰模板
相信不少人与文超一样需要一个MVC 嵌套的母版页 项模板 嵌套的母版有助于细致规划页面公共部分(尤其是要求一改全改的地方) 但是目前官方的MVC项模板中尚未提供 而事实上制作一份项模板是相当简单的 文超懒怠成性 遂以先在网上搜索一番 希望有现成的以飨懒人 未果 于是 自己动手 丰衣足食 吧
先来看看最终结果吧 那么接下来文超将介绍两点 共四种方法
安装完后您将看到 MVC 节点下多了一个 MVC View 嵌套的母版页 模板 嗯 中文字在英文堆里特别显眼
一是大众做法 敲多两行代码 忍着点也能活 等微软的更新(三种)
二是文超写文章的目的所在 使用自制的土枪
文超所指的是在MVC尚未提供而又想要得到 嵌套的母版页 一样的效果时的做法 其实如大家所知 要在 MVC 下实现这功能相当简单 为方便演示例子 文超对默认的MVC项目里的 site master 进行了人工改造 在母版里加了几个 ContentPlaceHolder
<%@ Master Language= C# Inherits= System Web Mvc ViewMasterPage %>
<!DOCTYPE PUBLIC //W C//DTD XHTML Strict//EN strict dtd >< xmlns= ><head runat= server >? <title><asp:ContentPlaceHolder ID= TitleContent runat= server /></title>? <link stylesheet type= text/css />? <asp:ContentPlaceHolder ID= HeaderContent runat= server /></head>
<body>? <div>? <h >这儿是头</h >? <div>? <asp:ContentPlaceHolder ID= BodyContent runat= server />? <h >这儿是其他内容</h >? </div>? <h >这儿是脚</h >? </div></body></>
方法一
接着文超再在 Views\Shared 下新建一个 Article Master 母版
要让 Article Master作为 Site Master 的嵌套母版 只需要将首行的 <%@ Master Language= C# Inherits= System Web Mvc ViewMasterPage %> 加入 MasterPageFile 属性 并将其值填入指定嵌套的母版 并去掉所有 HTML 代码 敲入与嵌套母版 site master 中的 ContentPlaceHolder 对应一致的 Content 即可 按文超的例子 去掉了首行声明以外的所有 HTML 以后 并厌恨其烦地敲了这些代码 Article Master 应该长成这样
<%@ Master Language= C# MasterPageFile= ~/Views/Shared/Site Master Inherits= System Web Mvc ViewMasterPage %>
<asp:Content ID= Content ContentPlaceHolderID= TitleContent runat= server ></asp:Content><asp:Content ID= Content ContentPlaceHolderID= HeaderContent runat= server ></asp:Content><asp:Content ID= Content ContentPlaceHolderID= CSSContent runat= server ></asp:Content><asp:Content ID= Content ContentPlaceHolderID= BodyContent runat= server ></asp:Content>?
方法二
这也是文超之前使用的办法 使用ViewContentPage你可以免除了敲入这部分代码的劳累
<asp:Content ID= Content ContentPlaceHolderID= TitleContent runat= server ></asp:Content>
<asp:Content ID= Content ContentPlaceHolderID= HeaderContent runat= server ></asp:Content>
<asp:Content ID= Content ContentPlaceHolderID= CSSContent runat= server ></asp:Content>
<asp:Content ID= Content ContentPlaceHolderID= BodyContent runat= server ></asp:Content>
但是你要做两件事情
? ViewContentPage 生成的文件名扩展名是 aspx 你需要将它修改为 master 扩展名
? 修改首行的 page 指令为 master 指令 例如
<%@ Master Language= C# MasterPageFile= ~/Views/Shared/Site Master Inherits= System Web Mvc ViewMasterPage %>
方法三
方法三是使用 ASP NET WebForm 的 嵌套的母版 模板 这个大家应该都很熟悉 你可能要做的也是两件事情
? 将多余的 master cs 及 designer cs 删掉
? 将首行的多余属性去掉 将 Inherits 属性值设置为: System Web Mvc ViewMasterPage
方法四
这是本文的核心所在 这种方法使用自制模板 一次性填补上述三种方法的不足 既不用如方法一那样敲键盘 也不用像方法二那样修改 master 指令 更不用像方法三那样删文件 一劳永逸 一箭三雕 一石三鸟 一举三得 的的确确 确确实实 实实在在让文超舒心 首先文超在这个目录下(MVC项模板目录)
C:\Program Files\Microsoft Visual Studio \Common \IDE\ItemTemplates CSharp\Web\MVC
找到这个压缩文件
MvcViewContentPageItemTemplatev cs zip
其实这就是方法二所使用的MVC View Content Page项模板 解压到任意一个文件夹(文超解压到桌面去了 文超的桌面非常的乱 我相信大部分程序员的桌面都是乱的一团糟的)
你将得到两样东西
Views 文件夹
MvcViewNestedMasterPageItemTemplatev cs vstemplate
这份文件正是模板定义 是一份 XML 文件 接下来进行人工改造 改造的结果是这样
<VSTemplate Version= xmlns= Type= Item >? <TemplateData>? <DefaultName>ViewNestedMasterPage Master</DefaultName>? <Name Package= {DC FBF c AAA F B F } ID= >MVC View 嵌套的母版页</Name>? <Icon Package= { c c ef c f b c f} ID= />? <Description Package= {DC FBF c AAA F B F } ID= >MVC View 继承自其他母版页的母版页</Description>? <ProjectType>CSharp</ProjectType>? <SortOrder> </SortOrder>? <SupportsMasterPage>true</SupportsMasterPage>? <NumberOfParentCategoriesToRollUp> </NumberOfParentCategoriesToRollUp> ? <RequiredFrameworkVersion> </RequiredFrameworkVersion>? <TemplateGroupID>MVC</TemplateGroupID> ? <ShowByDefault>false</ShowByDefault>? </TemplateData>? <TemplateContent>? <CustomParameters>? <CustomParameter Name= $language$ Value= C# />? <CustomParameter Name= $SelectMaster$ Value= true />? <CustomParameter Name= $viewdatatype$ Value= />? <CustomParameter Name= $usingviewdatatype$ Value= />? <CustomParameter Name= $ParentExtension$ Value= master />? <CustomParameter Name= $ChildExtension$ Value= cs />? </CustomParameters>? <References />? <ProjectItem SubType= TargetFileName= $fileinputname$ Master ReplaceParameters= true >Views\Home\ViewNestedMasterPage Master</ProjectItem>? </TemplateContent>? <WizardExtension>? <Assembly>Microsoft VisualStudio Web Extensions Version= Culture=neutral PublicKeyToken= bf ad e </Assembly>? <FullClassName>Microsoft VisualStudio Web Mvc ItemTemplateWizard</FullClassName>? </WizardExtension></VSTemplate>
第二步进入到 Views\Home 找到ViewContentPage aspx 文件 将其删除 然后在此文件夹内创建一份 master 文件 据MvcViewNestedMasterPageItemTemplatev cs vstemplate 的改造结果 这份文件需要命名为 ViewNestedMasterPage Master 这份 master 文件的内容如下
<%@ Master Language= C# ? MasterPageFile= $MasterPage$ Inherits= System Web Mvc ViewMasterPage %>
$ContentTags$
第三步改完后将其压缩为 ZIP 压缩包(选中 Views 文件夹和 MvcViewNestedMasterPageItemTemplatev cs vstemplate 后右击 >发送到 >压缩(zipped)文件夹)为它起个统一风格的名字 MvcViewNestedMasterPageItemTemplatev cs zip
因为时间关系文超已经制作好这份文件了 点击此处下载 接着你只需要从第四步开始
第四步将ZIP文件复制到刚才 ViewContentPage 项模板同一位置
C:\Program Files\Microsoft Visual Studio \Common \IDE\ItemTemplates CSharp\Web\MVC
第五步添加项模板到 VS
无论你是用 CMD 还是在VS的快捷方式上(别忘记安装完后设置回原来路径)修改都可以 你需要使用 setup 选项将创建的项模板添加到 VS 中去 执行下面命令行
C:\Program Files\Microsoft Visual Studio \Common \IDE\devenv exe /setup
lishixinzhi/Article/program/ASP/201311/21717c和net区别?
aspx:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="PassWordChangeUserForm.aspx.cs" Inherits="PassWordChangeUserForm" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<link href="css/main.css" type="text/css" rel="stylesheet"/>
<script language="javascript" src="js/passwordStrength.js" type="text/javascript" charset="gb2312"></script>
<link type="text/css" rel="stylesheet" href="css/XCheck3.css" charset="gb2312"/>
<script language="javascript" type="text/javascript" src="js/XCheck3.js" charset="gb2312"></script>
<script language="javascript" type="text/javascript">
function checkPwd(args)
{
var oldPwd=document.getElementById("<%=hfPwd.ClientID %>").value;
if(args.value==oldPwd)
{
document.getElementById("validTxtOldPassWord").style.backgroundColor="#E9FFEB";
document.getElementById("validTxtOldPassWord").style.color="#1E7ACE";
document.getElementById("validTxtOldPassWord").innerHTML="原密码验证通过";
args.IsValid=true;
flag=true;
}
else
{
document.getElementById("validTxtOldPassWord").style.backgroundColor="#FFF2E9";
document.getElementById("validTxtOldPassWord").style.color="Red";
document.getElementById("validTxtOldPassWord").innerHTML="*不可为空或输入有误";
args.IsValid=false;
flag=false;
}
}
</script>
</head>
<script src="../Scripts/jquery-1.3.2.js" type="text/javascript"></script>
<SCRIPT language="JavaScript" type="text/javascript" src="js/calendar.js"></SCRIPT>
<body bottommargin="0" leftmargin="0" topmargin="0" rightmargin="0">
<form runat="server" id="fm1">
<br>
<%--<table class="usertableborder" cellspacing="1" cellpadding="3" width="96%" align="center"
border="0">
<tr>
<th colspan="3" style="height: 25px">
密码修改</th>
</tr>
<tr>
<td class="usertablerow2" align="right" style="width: 300px; height: 26px;">
原密码:</td>
<td class="usertablerow2" style="height: 26px">
<input id="txtOldPassWord" type="password" runat="server" style="width:200px;" onblur="return checkPwd(this)" />
</td>
</tr>
<tr>
<td class="usertablerow2" align="right" style="width: 300px; height: 26px;">
新密码:
</td>
<td class="usertablerow2" style="height: 26px">
<input id="txtPassWord" type="password" runat="server" style="width:200px;" onkeyup="ps.update(this.value);" />
</td>
</tr>
<tr>
<td class="usertablerow2" align="right" style="width: 300px">
密码确认:
</td>
<td class="usertablerow2">
</td>
</tr>
<tr>
<td align="center" class="usertablerow1" colspan="2">
?
<asp:Button ID="Button1" runat="server" CssClass="ptsbutton" OnClick="Button1_Click"
Text=" 更 新 " />
?
<input type="Button" Class="ptsbutton" value=" 返 回 " OnClick="javascript:history.go(-1);" /><div id="Div2">
</div> </td>
</tr>
<tr>
<td colspan="2">
<asp:HiddenField ID="hfPwd" runat="server" />
</td>
</tr>
</table>--%>
<table class="usertableborder" cellspacing="1" cellpadding="3" width="96%" align="center"
border="0">
<tr >
<td class="usertablerow2" style="width:200px; text-align:right;">
原密码
</td>
<td class="usertablerow2" style=" width:200px; vertical-align:middle; text-align:left;">
<input id="txtOldPassWord" type="password" runat="server" style="width:200px; height:23px;" onblur="return checkPwd(this)" />
</td>
<td class="usertablerow2" style="width:250px; text-align:left;" >
<font size="2" color="Red"> <asp:Label ID="validTxtOldPassWord" runat="server" BorderWidth="0">*原密码必须填写</asp:Label></font>
</td>
</tr>
<tr >
<td class="usertablerow2" style="width:200px; text-align:right;">
新密码
<td class="usertablerow2" >
<input id="txtPassWord" type="password" runat="server" style="width:200px; height:23px;" onkeyup="ps.update(this.value);" />
</td>
<td class="usertablerow2" style="width:250px;text-align:left;" >
<asp:Label ID="validTxtPassWord" runat="server" BorderWidth="0"></asp:Label>
</td>
</tr>
<tr>
<td class="usertablerow2">?</td>
<td class="usertablerow2">
<script type="text/javascript" language="javascript">
var ps = new PasswordStrength();
ps.setSize("200","20");
ps.setMinLength(6);
</script>
</td>
<td class="usertablerow2">?</td>
</tr>
<tr >
<td class="usertablerow2" style="text-align:right; width:200px;">
密码确认
<td class="usertablerow2">
<asp:TextBox ID="txtAssurePassword" TextMode="Password" runat="server" style="width:200px; height:23px;"></asp:TextBox></td>
<td class="usertablerow2" style="width:250px; text-align:left;" >
<asp:Label ID="validTxtAssurePassword" runat="server" BorderWidth="0"></asp:Label>
</td>
</tr>
<tr style="text-align:center;">
<td class="usertablerow2" colspan="3" rowspan="2" style="text-align: center">
<asp:Button ID="Button1" runat="server" Width="66px" Text=" 提 交 " OnClientClick="return formok()" OnClick="Button1_Click" />
?
?<input id="Button3" type="button" value=" 取 消 " style="width: 66px" />
?</td>
</tr>
<tr>
</tr>
</table>
<br>
<table class="usertableborder" cellspacing="1" cellpadding="3" width="96%" align="center"
border="0">
<tr>
<th colspan="2">
使用方法
<asp:HiddenField ID="hfPwd" runat="server" />
</th>
</tr>
<tr>
<td class="usertablerow1" align="right" width="11%">
<strong>特殊说明</strong></td>
<td class="usertablerow1" width="89%">
按照要求输入即可
</td>
</tr>
</table>
</form>
<script type="text/javascript">
//基础方法
function $(objid){
return document.getElementById(objid);
}
var arr=new Array();
////////////////////////////
/*
方法介绍
1-XChecksetcont();有五个参数,分别是
(1)提示信息
(2)输入正确提示
(3)输入错误提示
?(4)数据库存在此数据输出的提示信息。不存在Ajax检查的字段此地方写“”。或者null(建议null)
(5)提交表单还有字段为成功系统的提示信息,是以alert的形式提示。
2-check()
参数分别是输入控件的id,。显示提示语句的id。检测此字段的方法名称。是否启用ajax检查。
3-seturl。可选,。不启用ajax检测唯一性或者验证码的时候不必写此方法
指定一个jsp页面,例如***.jsp,接受参数可以指定名称,例子中是uname
你需要编写一个***.jsp,次页面没有htm代码,全部是java代码,接受一个uname的参数
然后判断uname是否存在于数据库,存在,out.print("0")。不存在out.print("1")
*/
//arr[0]=new XCheck();
//arr[0].XChecksetcont("中文或英文名称","验证通过","不可为空或格式错误","","用户名填写错误");
//arr[0].check("txtUserName","validTxtUserName","checknicks",false);
///////////////////////////////
arr[0]=new XCheck();
arr[0].XChecksetcont("6-20长度","验证通过","不可为空或格式错误");
arr[0].check("txtPassWord","validTxtPassWord","chkpass",false);
//////////////
arr[1]=new XCheck();
arr[1].XChecksetcont("密码确认","验证通过","两次密码输入不同");
arr[1].check("txtAssurePassword","validTxtAssurePassword","chkapass",false);
function formok()
{
if(flag==false)
{
alert("原密码输入错误");
document.getElementById("txtOldPassWord").focus();
return false;
}
for(var i=0;i<arr.length;i++)
{
if(!arr[i].getstate())
{
arr[i].alertwrong();
return false
}
}
// if(!chkapass($("txtPassWord").value))
//{arr[6].alertwrong();
//return false;
//}
return true;
}
///////////////////////////////////
function checknick(str) {
var re=/[^0-9a-zA-Z\_]/ ;
if(re.test(str)) {
// alert("你输入了非法字符!");
return false;
}
if(str.length>12 || str.length<3)
{ // alert("error!");
return false;
}
return true;
}
///////////////////////////////////
function checknicks(str)
{
reg = /^([\u4E00-\u9FA5]|[A-Za-z])*$/;
if(reg.test(str) && str!=null && str!="")
{
return true;
}
else
{
return false;
}
}
function chkpass(val)
{
if(val.length>=6 && val.length<=20)
return true;
else
return false;
}
function chkemail(val)
{
var remail=/^\w+([-+.]\w+)*@\w+([-.]\\w+)*\.\w+([-.]\w+)*$/;
if(remail.test(val))
{
return true;
}
return false;
}
function chkmob(val)
{
//if(val==null || val==""|| val.length>11){
//return false;
//}
//var remob= /^((\(\d{3}\))|(\d{3}\-))?13\d{9}|15[089]\d{8}$/ ;
//if( remob.test(val) ){
//return true;
//}else{
//return false;
//}
//}
//function chkqq(val)
//{
//if(val==null || val==""){
//return true;
//}
//var reqq= /^[1-9]\d{4,9}$/ ;
//if( reqq.test(val) ){
//return true;
//}else{
//return false;
//}
var i,j,strTemp;
strTemp="0123456789-()# ";
var reg0=/^13\d{5,9}$/; //130--139。至少7位
var reg1=/^153\d{8}$/; //联通153。至少7位
var reg2=/^159\d{8}$/; //移动159。至少7位
var reg3=/^158\d{8}$/;
var reg4=/^150\d{8}$/;
var reg5=/^151\d{8}$/;
if(val==""||val==null)
{
return false;
}
if (reg0.test(val)||reg1.test(val)||reg2.test(val)||reg3.test(val)||reg4.test(val)||reg5.test(val))
{
return true;
}
for (i=0;i<val.length;i++)
{
j=strTemp.indexOf(val.charAt(i));
if (j==-1)
{
//说明有字符不合法
return false;
}
}
//说明合法
return true;
}
function chknull(val)
{
if(val==null || val==""){
return false;
}
else{
return true;
}
}
function chkapass(val)
{
if($("txtPassWord").value==val)
return true;
else
return false;
}
</script>
</body>
</html>
------------------------------------
.cs:
using System;
using System.Data;
using System.Data.Sql;
using System.Data.SqlClient;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public partial class PassWordChangeUserForm : System.Web.UI.Page
{
Model.Authority nc_Users = new Model.Authority();
BLL.Authority bll_Users = new BLL.Authority();
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
}
int IdNum = int.Parse(SessionInclude.Id);
nc_Users = bll_Users.GetModel(IdNum);
hfPwd.Value = nc_Users.PassWord;
}
protected void Button1_Click(object sender, EventArgs e)
{
nc_Users.PassWord = txtPassWord.Value;
bll_Users.Update(nc_Users);
if (SessionInclude.SessionId != "管理员")
{
SqlConnection conn = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["DB"].ConnectionString);
Model.SalePerson MSP = new BLL.SalePerson().GetPageList(1, 1, "id", false, "userName='" + SessionInclude.SessionId + "'")[0];
MSP.password = txtPassWord.Value;
BLL.SalePerson BSP = new BLL.SalePerson();
BSP.Update(MSP);
MessageBox.Show("密码更新成功!", "userMainPage.aspx");
}
else
{
MessageBox.Show("密码更新成功!", "adminMainPage.aspx");
}
}
}
这是我的一个项目中的密码修改前台和后台代码,供你参考,如果感觉对你有用请鼓励下!!!
asp.net 需要模板引擎么?
先说.Net:它不是语言,而是微软推出的开发平台,在这个平台上可以使用VB、C#、C++、Java等语言编写程序。
C/C#准确的说,是两种语言。
C语言是CombinedLanguage(组合语言)的中英混合简称。是一种计算机程序设计语言。它既具有高级语言的特点,又具有汇编语言的特点。它可以作为工作系统设计语言,编写系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。因此,它的应用范围广泛,不仅仅是在软件开发上,而且各类科研都需要用到C语言,具体应用比如单片机以及嵌入式系统开发。
C#是微软公司发布的一种面向对象的、运行于.NETFramework之上的高级程序设计语言。并定于在微软职业开发者论坛(PDC)上登台亮相。C#是微软公司研究员AndersHejlsberg的最新成果。C#看起来与Java有着惊人的相似;它包括了诸如单一继承、接口、与Java几乎同样的语法和编译成中间代码再运行的过程。但是C#与Java有着明显的不同,它借鉴了Delphi的一个特点,与COM(组件对象模型)是直接集成的,而且它是微软公司.NETwindows网络框架的主角。
但是由于C/C++的语法90%相似,而且通常支持C++的编译器也支持C编译,所以通常把C/C++一起提。而C#则完全是另一套语言了,虽然语法和C/C++也有很大一部分的相似。
C++在C的基础上改善了语法(使之更易用),增加了模板(泛型)、引用以及面向对象等内容,而且还提供了一套标准模板库。可以说使用C++语言比直接使用C语言更容易,更方便。当然,也更难学一点。
而C#的出现则是为了和Java抗衡,由于Java摈弃了C/C++中很多容易让人混淆的特性,以Java为模板的C#也同样做了这些事情,甚至为了超过Java,让很多事情变得更简单。但表面简单的背后是一套复杂的.NETFramework作为支持。因此,学习C#的重点和难点已经不是语法本身,而是了解和学会应用.NETFramework。
问题本身存在问题,可能对asp.net认识太浅
asp.net开发不需要什么模板,如果你说的是站头站尾应用在每个页面,那个是母板,页面可以自由选择已有母板达到自动应用页头页尾,页面本身作为页面主体呈现.
asp.net没什么引擎,只是发布网站需要IIS支持,?按F5进入调试会起动一个临时IIS模拟器起到临时IIS呈现效果
看来很多朋友对我的回答有意见
首先看看问题是什么?
asp.net 需要模板引擎么?
提的问题有提到2个方面,一个是模板,一个引擎
但是模板引擎的说法没有官方描述,根据每个人的理解是不一样的
当做模板理解,就出了一堆 layout masterpage
当页面引擎理解,asp.net编译,iis解析 和 最新的razor页面解析引擎
了解的越多不懂得就越多,欢迎批评指正
另外那些喷子可以说说自己的理解,别在那装懂
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。