问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

use的用法

发布网友 发布时间:2022-04-29 09:42

我来回答

2个回答

懂视网 时间:2022-04-20 20:24

User Control大家肯定不会陌生,在使用ASP.NET的过程中,除了aspx页面,最常见的就莫过于ascx了。ascx是一个有独立逻辑的组件,提供了强大的复用特性,合理使用,能够大大提高开发效率。通过User Control直接生成HTML内容其实已经是一个比较常用的技巧了(尤其在AJAX时代),不过网络上这方面的内容比较少,很多人还是在苦苦地拼接字符串,因此在这里我通过一个实例简单介绍一下这个技巧。

对一个对象(文章,图片,音乐,etc.)进行评论是应用中最常见的功能之一。首先,我们定义一个Comment类,以及其中会用到的“获取”方法:

public partial class Comment{ public DateTime CreateTime { get; set; } 
 public string Content { get; set; }
} 
public partial class Comment{ private static List<Comment> s_comments = new List<Comment>
 { new Comment
 {
  CreateTime = DateTime.Parse("2007-1-1"),
  Content = "今天天气不错"
 }, new Comment
 {
  CreateTime = DateTime.Parse("2007-1-2"),
  Content = "挺风和日丽的"
 }, new Comment
 {
  CreateTime = DateTime.Parse("2007-1-3"),
  Content = "我们下午没有课"
 }, new Comment
 {
  CreateTime = DateTime.Parse("2007-1-1"),
  Content = "这的确挺爽的"
 }
 }; 
 public static List<Comment> GetComments(int pageSize, int pageIndex, out int totalCount)
 {
 totalCount = s_comments.Count; 
 List<Comment> comments = new List<Comment>(pageSize); 
 for (int i = pageSize * (pageIndex - 1);
  i < pageSize * pageIndex && i < s_comments.Count; i++)
 {
  comments.Add(s_comments[i]);
 } 
 return comments;
 }
}

为了显示一个评论列表,我们可以使用一个用户控件(ItemComments.aspx)来封装。自然,分页也是必不可少的:

<asp:Repeater runat="server" ID="rptComments">
 <ItemTemplate>
 时间:<%# (Container.DataItem as Comment).CreateTime.ToString() %><br />
 内容:<%# (Container.DataItem as Comment).Content %> 
 </ItemTemplate>
 <SeparatorTemplate>
 <hr />
 </SeparatorTemplate> <FooterTemplate>
 <hr />
 </FooterTemplate></asp:Repeater> <% if (this.PageIndex > 1)
 { %>
 <a href="/ViewItem.aspx?page=<%= this.PageIndex - 1 %>" title="上一页">上一页</a> <% } %><% if (this.PageIndex * this.PageSize < this.TotalCount)
 { %>

还有:

public partial class ItemComments : System.Web.UI.UserControl{ protected override void OnPreRender(EventArgs e)
 { base.OnPreRender(e); 
 this.rptComments.DataSource = Comment.GetComments(this.PageSize,  this.PageIndex, out this.m_totalCount); this.DataBind();
 } 
 public int PageIndex { get; set; } 
 public int PageSize { get; set; } 
 private int m_totalCount; public int TotalCount
 { get
 {  return this.m_totalCount;
 }
 }
}

然后再页面(ViewItem.aspx)中使用这个组件:

<p id="comments"><demo:ItemComments ID="itemComments" runat="server" /></p>

以及:

public partial class ViewItem : System.Web.UI.Page{ protected void Page_Load(object sender, EventArgs e)
 { this.itemComments.PageIndex = this.PageIndex;
 } 
 protected int PageIndex
 { get
 {  int result = 0;  Int32.TryParse(this.Request.QueryString["page"], out result); 
  return result > 0 ? result : 1;
 }
 }
}

打开ViewItem.aspx之后效果如下:

时间:2007/1/1 0:00:00 内容:今天天气不错


时间:2007/1/2 0:00:00 内容:挺风和日丽的


时间:2007/1/3 0:00:00 内容:我们下午没有课


下一页

这张页面的功能非常简单,那就是察看评论。当前评论的页码会使用QueryString的page项进行指定,然后在ViewItem.aspx里获取到并且设置ItemComments.ascx控件的属性。ItemComments控件会根据自身属性来获取数据,进行绑定,至于显示内容,全都定义在ascx中了。由于需要分页功能,这个评论控件中还包含了上一页和下一页的链接,他们链接的目标很简单,就是ViewItem.aspx页,并且加上页码的Query String而已。

功能是完成了,不过用着用着忽然觉得不妥,为什么呢?因为我们在翻页,或者用户发布评论的时候,整张页面都刷新了。这可不好,要知道可能ViewItem页中还有其他几个显示部分,它们可是不变的。而且如果其他几个部分也需要分页,那么可能就需要保留页面上每一部分的当前页码,这样开发的复杂性还是比较高的。

那么我们不如用AJAX吧。无论是用户察看评论时进行翻页还是发表评论,都不会对页面上的其他内容造成影响。要开发这个功能,自然需要服务器端的支持,那么该怎么做呢?一般我们总是有两种选择:

  1. 服务器端返回JSON数据,在客户端操作DOM进行呈现。

  2. 服务器端直接返回HTML内容,然后在客户端设置容器(例如上面id为comments的p)。

不过无论采用哪种做法,“呈现”的逻辑一般总是另写一遍(第一次的呈现逻辑写在了ItemComments.ascx中)。如果使用第1种做法,那么呈现逻辑就需要在客户端通过操作DOM进行呈现;如果使用第2种做法,那么就要在服务器端进行字符串拼接。无论哪种做法都违背了DRY原则,当ItemComments.ascx里的呈现方式修改时,另一处也要跟着修改。而且无论是操作DOM元素还是拼接字符串维护起来都比较麻烦,开发效率自然也就不高了。

如果我们能够直接从ItemComments控件获得HTML内容该多好啊——那么我们就这么做吧。请看如下代码(GetComments.ashx):

public class GetComments : IHttpHandler{ public void ProcessRequest(HttpContext context)
 {
 context.Response.ContentType = "text/plain"; 
 ViewManager<ItemComments> viewManager = new ViewManager<ItemComments>(); 
 ItemComments control = viewManager.LoadViewControl("~/ItemComments.ascx");
 
 control.PageIndex = Int32.Parse(context.Request.QueryString["page"]);
 control.PageSize = 3;
 
 context.Response.Write(viewManager.RenderView(control));
 } 
 public bool IsReusable { ... }
}

很简单的代码,不是吗?创建对象,设置属性,然后通过Response.Write输出而已。实在没什么大不了的——不过关键就在于ViewManager类,我们来看一下它是怎么实现的:

public class ViewManager<T> where T : UserControl{ private Page m_pageHolder; 
 public T LoadViewControl(string path)
 { this.m_pageHolder = new Page(); return (T)this.m_pageHolder.LoadControl(path);
 } 
 public string RenderView(T control)
 { StringWriter output = new StringWriter(); 
 this.m_pageHolder.Controls.Add(control); HttpContext.Current.Server.Execute(this.m_pageHolder, output, false); 
 return output.ToString();
 }
}

ViewManager中只有两个方法:LoadViewControl和RenderView。LoadViewControl方法的作用是创建一个Control实例并返回,RenderView方法的作用则就是生成HTML了。这个实现方式的技巧在于使用了一个新建的Page对象作为生成控件的“容器”,而最后其实我们是将Page对象的整个生命周期运行一遍,并且将结果输出。由于这个空的Page对象不会产生任何其他代码,因此我们得到的,就是用户控件生成的代码了。

不过要实现这个AJAX效果,还需要做两件事情。

第一,就是简单修改一下ItemComments控件中的翻页链接,让它被点击时调用一个JavaScript函数。例如“上一页”的代码就会变成:

<a href="/ViewItem.aspx?page=<%= this.PageIndex - 1 %>" title="上一页" 
onclick="return getComments(<%= this.PageIndex - 1 %>);">上一页</a>

第二,就是实现getComments这个客户端方法。在这里我使用了prototype框架,好处就是能够用相当简洁的代码来做到替换HTML的AJAX效果:

<script type="text/javascript" language="javascript">
 function getComments(pageIndex)
 { new Ajax.Updater(  "comments",  "/GetComments.ashx?page=" + pageIndex + "&t=" + new Date(),
  { method: "get" }); 
 
 return false; // IE only
 }</script>

大功告成。

其实就像之前所说的那样,使用UserControl进行HTML代码生成是一个十分常用的技巧。尤其在AJAX应用越来越普及的情况下,合理使用上面提到的方式可以方便的为我们的应用添加AJAX效果。而且很多情况下,我们即使不需要在页面上显示内容,也可以将内容使用UserControl进行编辑。因为编写UserControl比拼接字符串的方式无论是在开发效率上还是可维护性上都高出许多。由于这个方式其实使用了WebForms这个久经考验的模型,因此在执行效率方面也是相当高的。此外,就刚才的例子来说,使用UserCotrol进行HTML生成还有其他好处:

  1. 页面呈现逻辑只实现了一次,提高了可维护性。

  2. 不会影响页面的SEO,因为在客户端<a />的href还是有效的。

事实上,WebForms是一个非常强大的模型,所以ASP.NET MVC的View也使用了WebForms的引擎。通过上面这个例子,我们其实还可以做到其他很多东西——例如用UserControl来生成XML数据,因为UserControl本身不会带来任何额外的内容。

热心网友 时间:2022-04-20 17:32

用法:use是及物动词,接名词、代词作宾语。也可接由as短语或动词不定式充当补足语的复合宾语。use偶尔可接人作宾语,意为“利用某人”,即把某人作为手段或工具。

use

一、含义

n. 使用;用法;使用权;运用

v. 利用;对待;使用;<口> 吸(烟);<口>服用(*)

二、用法

use是日常用语,基本意思是“用”“使用”,多指一种比较明显地、物质地消耗,有时也可指不含或含有很少的消费、消耗的意思,强调目的性与实际效益。

used to仅用于一般过去时,表示过去常常发生的事,否定式为used not to或did not use to。

use用作名词时,基本意思是“使用,应用”,引申可作“用途,效用”解。

The present phone boxes will go out of use next year.

现有的公共电话亭明年就不再使用了。



扩展资料:

近义词:apply、employ、enjoy。

一、apply

1、含义:vt. 应用;涂;使专心从事。vi. 申请;有关联。

2、举例

The plastic coating is easy to be applied on any surface.

塑性涂料容易涂在任何表面上。

二、employ

1、含义:v. 雇佣;使用。

2、举例

They employ casual labor to pick the fruit

他们雇佣临时工摘水果。

三、enjoy

1、含义:v. 享受;喜欢。

2、举例

They enjoy the fruits of their hard labor.

他们享受自己辛勤努力的成果。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
填地方专项志愿会影响本科二批录取吗? 地方专项计划成绩不好的可以报吗 国家专项地方专项影响本科填报吗 地方专项计划滑档影响本科录取吗 报地方专项计划会影响高考录取吗 地方专项计划影响后续录取吗 电脑最高配组装机配置组装电脑什么配置比较好 台式组装游戏电脑配置组装电脑什么配置比较好 打游戏主机电脑配置台式电脑主要是玩游戏什么配置最合适 组装高配置台式电脑组装电脑什么配置比较好 “过去常常”和“习惯于做某事”用“use”怎么说? use的各种搭配并造句 use,borrow,ask词组搭配 use doing 还是 use to do 还是 use do use后面是接to do还是doing或者? nousetodo还是doing? use的搭配 use的用法有哪些? use的搭配词组 关于use的短语 use的搭配结构有哪些? oppo free oppo echo free2 oppoencox配对不上 oppow31灵动版耳机充满电 oppo耳机ETI41开关键 oppo蓝牙耳机eti41使用说明 灭火器使用时应水平,或颠倒放置使用。 外装式干粉灭火器使用时一只手握喷嘴,另一只手拉提环,不要上 灭火器是否能水平放置 oppo耳机eti41使用方法 use most of是固定搭配吗 used 的几个搭配并说出意思,用used提问有哪两种,还有回答肯定和否定又是哪几种, use ...to...是固定搭配吗? 请帮我理一下关于keep和use的词组,那个use的 有很多 我还老是搞混 什么某物被用来做某事的那几个 use能表示花费多少时间吗 英语use with有这个搭配吗 英语use external storage怎么翻译? wms仓储物流管理系统有哪些? 仓库管理系统软件哪个好 仓储管理系统有哪些?比较方便的 用了几天的银筷子变色了,是什么原因呢? 如何擦去银筷子上的黑 银筷子夹泡菜为什么发黑? 你好银子碗变色,同样的食物放到银子碗里有的变黑,有的不变,什么原因? 把银筷子放在沸水里煮,之后筷子变黑了,是怎么一回事,是不是水里有毒? 银筷子刚吃饭就变黑了是什么原因? 都说银筷子可以防毒,这个说法到底有没有科学依据? 梦见去世亲人想喝白粥喝不到? 我在象城玛玛格里购买了一双银筷子,吃了凉拌菜之后就变色了,这是什么原因? 梦见已故的伯伯在吃粥