最佳开发实践
分类:高并发

<%-- --%> 注释代码是什么,怎么这么奇怪。

一.使用<% %>在HTML中嵌入C#代码

JSP全称Java Server Pages,是一种动态网页开发技术。它使用JSP标签在HTML网页中插入Java代码。标签通常以<%开头以%>结束。

本文提供了一些代码设计准则,目标是帮助ASP.NET MVC 开发人员创建可靠的应用程序,当然,你可根据实际应用程序选择合适的标准。本文由EntLib.com 小组翻译,欢迎分享和交流ASP.NET MVC 项目开发设计思路。

这个代码用在 ASP.NET 的 .aspx 页面中。

打开ASPX页面Default.aspx,首先在<title> </title>之间添加标题“使用%HTML中嵌入C#“,再在其中的<div> </div>标签中间输入以下代码:

1、JSP与PHP、ASP、ASP.NET等语言类似,运行在服务端的语言。Java 服务器页面 (Java Server Page ,JSP) 以扩展名 .jsp 保存

 

  • 它可以注释掉 HTML 代码,与 <!-- --> 的不同是,注释的 HTML 不会发送到客户端。
  • 它可以注释掉其中嵌入的 ASP.NET <% %> 代码。

<title>使用%HTML中嵌入C#</title>

jsp=java语法+jsp基础语法+jsp内置对象

Model建议 - Model Recommendations

2.jsp的注释方法有:

Model是定义业务领域相关的对象,应该包含业务逻辑(对象如何动作和关联),验证逻辑(验证对象的有效值),数据逻辑(数据对象如何持久化),和会话逻辑(跟踪用户状态)。

<div>

(1)在<%

 

<%

//注解1行

创建独立的Model项目,在ASP.NET MVC 项目中引用Model程序集。

            int i;

/*  注解多行  */

 

            for (i = 0; i < 10; i++)

%>

将所有业务逻辑放置在Model中。

            {

(2)jsp专有注释方法

如将所有业务逻辑放置在Model项目中,可根据实际业务数据来生成View和Controller。有如下好处:

                Response.Write(i.ToString());

<%--  --%>用于注释jsp中的java代码,EL表达式,jstl标签或者其他标签

  • 减少重复的业务逻辑。
  • 在View中减少业务逻辑,View易于理解。
  • 业务逻辑的测试仅仅和Model有关。

                Response.Write("在html中嵌入C#代码示例");

包含的内容都不显示

 

                Response.Write("<br />");                 

HTML注释在浏览器查看源代码时是可见的;如果使用HTML的注释来注释含有java代码或者表达式的语句,例如:“”;那么程序在运行时不会忽视html代码注释的内容,EL表达式里面的语句仍然会执行,jstl的判断语句也会执行,如果使用HTML注释了的表达式标签出现了语法错误也会导致程序报错,所以HTML注释中的内容也不能一律忽视,出现问题时也要查看HTML注释中的内容。

例如,下面需要显示用户的用户名 – 先显示Last Name,在View中代码如下:

            }

同样的道理,在js中使用单行注释//或者多行注释/**/来注释了EL表达式或者标签语言,同样还是会执行注释中的内容的

<% if (String.Compare((string)TempData["displayLastNameFirst"], "on") == 0)
       { %>
        Welcome, <%= Model.lastName%>, <%= Model.firstName%>
    <% }
       else
       { %>
        Welcome, <%= Model.firstName%> <%= Model.lastName%>
    <% } %>

             %>     

--%>

 

    </div>

然而你需要在每一个地方重复这一逻辑。如将这一业务逻辑放置在Model中,可在Model中添加一个属性封装这一逻辑。

用户浏览这个页面时,ASP.NET模块将运行其中的<% %>之间的C#代码块,生成HTML。我们可以通过点击IE-〉查看-〉源文件,看到这个页面在客户端的纯HTML代码,而看不到开发者所写的<% %>之间的C#代码。运行结果如下:

public string combinedName
{
    get
    {
        return (displayLastNameFirst ? lastName + " " + firstName : firstName + " " + lastName);
    }
    private set
    {
        ;
    }
}

图片 1

这样,可大大简化视图代码:

二.使用< Script ></ Script >在HTML中嵌入C#代码  

<% Welcome, <%= Model.combinedName %> %>

 首先我们来看一看在HTML页面中嵌入JavaScript脚本程序的格式: 

 

<SCRIPT LANGUAGE="JavaScript">

将所有验证逻辑放置在Model中

"JavaScript代码内容"
//JavaScript注释内容

所有输入验证应该在Model层,包括Client-side 验证。

</SCRIPT>
   为了通知浏览器使用的代码是JavaScript代码,必须在<SCRIPT>标记中加入LANGUAGE="JavaScript"属性。JavaScript代码一般以下面的形式包括在HTML代码中:其中,<script>标记是声明这是一个脚本程序,LANGUAGE是声明该脚本是一个Javascript 脚本。在<script>至</script>中间的任何内容都被视为脚本语句,会被浏览器解释执行。

可使用ModelState 添加验证检查,代码如下所示:

   我们用记事本编写一个HTML文件JavaScriptEx.html,代码如下:

if (String.IsNullOrEmpty(userName))

<HTML>

{

<HEAD>

   ModelState.AddModelError("username", Resources.SignUp.UserNameError);

<TITLE>响应事件</TITLE>

</HEAD>

 

<BODY>

不过,更好的办法是使用 System.ComponentModel.DataAnnotations,在Model类的属性上添加attribute,如下所示:

<SCRIPT LANGUAGE="JavaScript">

public class User

function aler(){

{

window.alert("这是JavaScript事件响应的例子");

   [Required(ErrorMessageResourceName = "nameRequired", ErrorMessageResourceType = typeof(Resources.User))]

}

   public String userName { get; set; }

 

       ...

</SCRIPT>

}

<INPUT TYPE="BUTTON" VALUE="触发按钮" ONCLICK="aler()">

 

</BODY>

为数据访问定义接口

</HTML>

接口用来暴露数据访问类的方法,强化ASP.NET MVC 的松散耦合设计。

   保存后直接点击生成的.html文件即可在IE浏览器中运行,单击“触发按钮”后将弹出对话框,结果如下:图片 2

可考虑使用Entity Framework 或 LINQ to SQL 创建对数据库的访问类,Entity Framework 和 LINQ to SQL 都支持存储过程。

 

 

 而对于同ASP.NET,除了<% %>标记,也可以使用<Script></ Script >标记用于在HTML中标记指令代码。对于ASP.NET,<Script>标记有两个特殊的属性:Language和Runat=”Server”。

将所有会话逻辑放置在Model中。

1>     Language:该属性用于指定 <Script></ Script >之间代码所使用的编程语言,默认为Visual Basic.NET。另外,这里指定的语言必须与ASPX页首行使用的<%@ Page Language="…"%>一致,否则编译错误,这表明ASP.NET虽然支持多种编程语言,但在同一页面上只能使用一种语言。

 

2>     Runat=”Server”属性用于指定代码运行的位置是在服务器端。<Script></ Script >常常用于定义各种变量和函数,完成一定的功能。下面的示例是使用<Script></ Script >标记结合<% %>,根据当前日期输出不同的语句。

View 建议 - View Recommendations

 

View用来展示Model数据,Controller负责选择View。业务逻辑不属于View,Model负责业务逻辑。View非常灵活,如Model的View可通过HTML显示,同样的Model也可通过XML 视图来呈现。

创建一个新的ASP.NET Web应用程序,打开ASPX页面Default.aspx,首先在<title> </title>之间添加标题“使用Script和%在HTML中嵌入C#“,在其中的<div> </div>标签中间输入以下代码:

 

<title>使用Script和%在HTML中嵌入C#</title>

将HTML放置在View和Partial View中(不要在Controller中)

默认的ASP.NET视图引擎提供了如下视图文件:HTML View(.aspx),Partial HTML View(.ascx)和Master page(.master)

   <div>

如下视图演示了对partial view的调用:

    <!--这是HTML注释方式-->

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %>

    <%--

    <script>和</script>实现一个函数fun1,该函数根据当前星期,返回不同的日程安排。

    Below is a list of items submitted by <b>

    这是ASP.NET的注释方式

<%= Html.Encode(ViewData["name"]) %></b>.

    --%>

    <p>

    <script language="C#" runat="server">

   

    String fun1(string day)

    ...

    {

    <div id="items">

        string plan = "";/*C,C++,C#注释方式*/

        <% Html.RenderPartial("ItemsByName");%>

        switch (day)

    </div>   

        {

</asp:content>

            case "Monday":

 

                plan = "向客户提案!";

Partial view(ItemsByName.ascx)如下所示:

                break;

<%@ Control Language="C#" %>

            case "Thuseday":

                plan = "参加霏霏的生日!";

        <% foreach (Seller.Controllers.Items item in (IEnumerable)ViewData.Model)

                break;

           { %>

            case "Wednesday":

            <tr>

                plan = "shopping!";

                <td>

                break;

                    <%= Html.Encode(item.title)%>

            case "Thursday":

                </td>

                plan = "去健身房!";

                <td>

                break;

                    <%= Html.Encode(item.price)%>

            case "Friday":

                </td>              

                plan = "向老板汇报工作!";

            </tr>       

                break;

        <% } %>

            default:

        </table>

                plan = "周末狂欢!";

      <% } %>

                break;               

Partial View 是一个强大的扩展和重用机制。你可在不同的地方包含相同的View,不必编写重复的代码。

        }

 

        return plan;   

在View中使用ViewData访问数据

    }

ASP.NET 提供了如下机制在View模板中访问数据:

    </script>

ViewData.Model 对象 – 在Controller的action方法中,在return语句中传入一个Model对象(return View(myModelObject))。

    <%--

ViewData Dictionary – 在action方法中存入数据(ViewData[“key”] = value),接着在View中方法相同的dictionary。

    <% %>调用函数fun1,根据当前星期,显示日程安排。

在可能的情况下,应该是一ViewData Model,而不是ViewData 来访问数据,因为Model 提供了类型安全。此外,你应在View模板中,使用数据访问机制,而不是Request / Session 来访问。

    --%>

如需要显示一个对象的多个属性,可使用ViewData.Model,并创建一个强类型View。针对seller详细页面,seller类有name、phone、address、email等等属性,在呈现View之前,你可在Controller中对ViewData.Model 赋值seller对象实例。但是如果是一些零散的数据,如page#、用户名和current time,则一般使用ViewData字典。

    <%

 

        string date = System.DateTime.Today.Date.ToString();

在使用模型绑定(Model bingding)时,避免在view中访问数据。

        string weekday = System.DateTime.Today.DayOfWeek.ToString();

在Controller 中访问数据库,在执行View之前,将从数据库中检索的数据复制给轻量的View Model对象,这样,轻量的View Model对象不必在视图执行时检索数据。

        string output = fun1(weekday);//C,C++,C#注释方式

 

        Response.Write("现在是"+date+","+weekday+",我计划"+output);       

使用(自动生成)客户端验证

         %>    </div>

从ASP.NET MVC 2 开始,可以很容易添加客户端验证。

运行结果如下:

(1) 如前所述,在Model层中添加数据验证逻辑;

图片 3

(2) 确保项目中Scripts目录有如下javascript 文件:MicrosoftAjax.js 和 MicrosoftMvcValidation.js;

利用以上两种方法可以将C#代码嵌入到HTML中,形成ASPX动态网页文件,但是这样的页面语法混杂,难以管理,针对这个问题,ASP.NET提出了代码分离的思想:即把代码文件(C#代码)和页面显示代码(HTML代码)分离在不同的文档中,各自独立完成Web页面的逻辑功能和显示功能。然后通过<%@ CodeFile=…%>将两者绑定在一起,以达到C#代码嵌入到HTML中的效果。

(3) 在表单提交页面,添加如下代码:

Default.aspx的第一行解析:

<script src="<%= Url.Content("~/Scripts/MicrosoftAjax.js") %>" type="text/javascript"></script>

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

 

<%@ Page …%>用来设置页面属性,各属性意义如下:

<script src="<%= Url.Content("~/Scripts/MicrosoftMvcValidation.js") %>" type="text/javascript"></script>

CodeFile="Default.aspx.cs"这个属性指定了隐藏在这个页面后面的代码文件,所要实现的功能代码就在Default.aspx.cs文件中。

 

Language="C#|VB"设置本页所采用的编程语言是C#,默认为C#

(4) 在表单中添加如下代码:

AutoEventWireup="true|false"是否使用ASP.NET约定的事件命名规则,为控件事件命名。

<% Html.EnableClientValidation(); %>

Inherits="…"定义公应用程序类继承的代码隐藏类

 

ResponseEdcodeing="…"设置ASPX编码方式,默认为Unicode。

现在如果编辑表单内容,当输入值不合格时,客户端马上进行验证提醒。

Trace="true|false"设置是否在程序中显示代码直行的跟踪信息。

 

TraceMode="SortType"设置跟踪信息的排序方式,默认为根据执行时间顺序排序,“SortByTime”。

在模板中插入server-side 注释

在View模板中使用服务端注释,在HTML呈现时,会剔除。

如下是server-side注释:

<%-- This is a server side template comment --%>

 

不要在View模板中使用HTML 注释,因为这些注释会呈现在web浏览器中,可被用户看到。

 

使用HTMLHelper 扩展方法。

System.Web.Mvc.Html 类中包含了很多有用的HTML 扩展方法。

Form 表单生成(BeginForm)

输入字段生成(checkbox、hidden、radio button、textbox)

链接URL生成(ActionLink)

XSS保护(Encode)

 

尽可能使用这些HTML扩展方法,如下是使用route table创建一个链接:

<%= Html.ActionLink(“Home page”, “Default”) %>

后续相关文章,可参考如下链接:

 

ASP.NET MVC 最佳开发实践(2)
ASP.NET MVC 最佳开发实践(3)

 

 

英文原文链接:
Best Practices for ASP.NET MVC

 

 

 

 

本文由10bet手机官网发布于高并发,转载请注明出处:最佳开发实践

上一篇:WEB标准学习路程之,单元格为 下一篇:阿里云域名申请,易用性不是炫
猜你喜欢
热门排行
精彩图文