1. 首页 > 产品展示

.net core 模板引擎-net装饰模板

.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/21717

c和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页面解析引擎

了解的越多不懂得就越多,欢迎批评指正

另外那些喷子可以说说自己的理解,别在那装懂

声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。