读书人

[交流:活泼气氛]VS.NET开发中的小技巧

发布时间: 2011-12-22 23:36:25 作者: rapoo

[交流:活跃气氛]VS.NET开发中的小技巧
本贴旨在分享开发过程中的技巧,借鉴其它人的优点,少走弯路。为大家提供一些常见问题的解决方案。

例子:

技巧:图片使网站丰富起来,但有的时候不是所有图片都能正常显示的。这个时候会出现一个或多个红叉叉,这个技巧是告诉你如何处理的。

HTML code
<img src="hello.gif" alt="hello" onerror="this.src='error.gif'" />


--------------------------------------------

声明:本贴用于交流,不是接分帖子,禁止灌水。(请斑竹给予灌水、顶贴者严厉打击)
版权声明:本贴仅用于技术交流,任何书籍用到以下例子需注明出处。不尊重他人劳动可耻。

希望高手不吝赐教。

[解决办法]
我也来一个:在DataGrid和GridView中对表头设定背景图片
C# code
在某些情况下,DataGrid或者GridView的默认样式并不能满足日益高涨的用户的要求,很多人追求美观的样式。对表头设定背景也是其中的一个方面,那么有什么好的方法可以达到这一要求呢,我的方法如下:DataGrid:private void DataGrid1_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e){    if(e.Item.ItemType == System.Web.UI.WebControls.ListItemType.Header)    {        e.Item.Attributes.Add("style", "background-image:url('background.gif')");    }}GridView:protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e){    if (e.Row.RowType == DataControlRowType.Header)    {        e.Row.Attributes.Add("style", "background-image:url('background.gif')");    }}
[解决办法]
我也来一个:在DataGrid和GridView中对表头设定背景图片,不需要后台代码。

HTML code
<asp:GridView runat="server" ID="gvStatList" AllowPaging="false" Width="100%" CssClass="grid"                AutoGenerateColumns="false" Visible="true" ShowFooter="false">                <HeaderStyle CssClass="grid-head" /></asp:GridView>
[解决办法]
1.互斥对象.很多情况下存在互斥对象,我通常这么处理

C# code
bool showObject{set{TextBox1.Visible=value;TextBox2.Visible=!value;}}
[解决办法]
C# code
<%=str%>后台代码变量变量=@<img src='XXX' onclick='fucn(/)'>            foreach (DataRow dr_Child in dsResult1.Tables[0].Rows)            {                              if (!Convert.ToBoolean(dr_Child["FLAG"]))                                   {                    msiChild.sFontColor = "FontRed";                    msiChild.BM = @"<img  src='/Images/NowPostion1.gif' />" + msiChild.BM;                 }                else if (Convert.ToBoolean(dr_Child["FLAG"]))                {                    msiChild.BM = @"<img  src='/Images/submit.gif' />" + msiChild.BM;                }                str += msiChild.BM;                      }            return str;
[解决办法]
Asp.Net2.0中我们可以方便的访问配置文件中,.NetFrameWork2.0新增加了 SystemWebSectionGroup 类。
允许用户以编程方式访问配置文件的 system.web 组。
比如判断web.config内是否为 debug="true",或者判断身份验证形式

SystemWebSectionGroup ws = new SystemWebSectionGroup();
CompilationSection cp = ws.Compilation;
用cp.Debug;就可以得到compilation节内关于"debug"的配置
AuthenticationSection as = ws.Authentication;
用 as.Mode 可以获取 authentication节中关于"mode"的配置,值为AuthenticationMode 枚举之一
AuthenticationMode的取值如下:
成员名称 说明
Forms 将基于 ASP.NET 窗体的身份验证指定为身份验证模式。
None 不指定身份验证。
Passport 将 Microsoft Passport 指定为身份验证模式。
Windows 将 Windows 指定为身份验证模式。在使用 Internet 信息服务 (IIS) 身份验证方法(基本、简要、集成 Windows (NTLM/Kerberos) 或证书)时适用此模式。


附:SystemWebSectionGroup 类的公共属性:


名称 说明
AnonymousIdentification 获取 anonymousIdentification 节。
Authentication 获取 authentication 节。
Authorization 获取 authorization 节。
BrowserCaps 获取 browserCaps 节。
ClientTarget 获取 clientTarget 节。
Compilation 获取 compilation 节。
CustomErrors 获取 customErrors 节。
Deployment 获取 deployment 节。
DeviceFilters 获取 deviceFilters 节。
Globalization 获取 globalization 节。
HealthMonitoring 获取 healthMonitoring 节。
HostingEnvironment 获取 hostingEnvironment 节。
HttpCookies 获取 httpCookies 节。
HttpHandlers 获取 httpHandlers 节。
HttpModules 获取 httpModules 节。
HttpRuntime 获取 httpRuntime 节。
Identity 获取 identity 节。
IsDeclarationRequired 获取一个值,该值指示是否需要声明此 ConfigurationSectionGroup 对象。 (从 ConfigurationSectionGroup 继承。)
IsDeclared 获取一个值,该值指示是否已声明此 ConfigurationSectionGroup 对象。(从 ConfigurationSectionGroup 继承。)
MachineKey 获取 machineKey 节。
Membership 获取 membership 节。
MobileControls 获取 mobileControls 节。
Name 获取此 ConfigurationSectionGroup 对象的名称属性。(从 ConfigurationSectionGroup 继承。)
Pages 获取 pages 节。
ProcessModel 获取 processModel 节。
Profile 获取 profile 节。
Protocols 获取 protocols 节。
RoleManager 获取 roleManager 节。
SectionGroupName 获取与此 ConfigurationSectionGroup 关联的节组名称。(从 ConfigurationSectionGroup 继承。)
SectionGroups 获取一个包含所有 ConfigurationSectionGroup 对象的 ConfigurationSectionGroup 对象,这些对象是此 ConfigurationSectionGroup 对象的子对象。(从 ConfigurationSectionGroup 继承。)
Sections 获取一个 ConfigurationSectionCollection,它包含此 ConfigurationSectionGroup 中的所有 ConfigurationSection 对象。(从 ConfigurationSectionGroup 继承。)
SecurityPolicy 获取 securityPolicy 节。
SessionState 获取 sessionState 节。
SiteMap 获取 siteMap 节。
Trace 获取 trace 节。
Trust 获取 trust 节。
Type 获取或设置此 ConfigurationSectionGroup 对象的类型。(从 ConfigurationSectionGroup 继承。)
UrlMappings 获取 urlMappings 节。
WebControls 获取 webControls 节。
WebParts 获取 webParts 节。
WebServices 获取 webServices 节。
XhtmlConformance 获取 xhtmlConformance 节。

[解决办法]
SQL2005增加了不少新特性,其中NTILE和ROW_NUMER使得我们不再为SQL如何灵活方便的分页伤脑筋了(不必再羡慕Oracle等数据库了)。
  下面就是一个很简单的分页查询语句:
DECLARE @rows_per_page AS INTEGER
DECLARE @current_page AS INTEGER
DECLARE @total_pages AS INTEGER

-- 设置每页的行数
SET @rows_per_page = 20
-- 设置要显示的页号(从1开始)
SET @current_page = 2
-- 计算总页数
SELECT @total_pages = COUNT(*) / @rows_per_page
FROM testtable;

-- 列出指定页的内容
WITH t AS
(
SELECT NTILE(@total_pages) OVER(ORDER BY id) AS page_number, *
FROM testtable
)
SELECT * from t
WHERE page_number = @current_page   程序简单到可以不用说明的程度。
  我们可以利用上述简单的语句,变化排序条件和查询表,就可以做出一个很通用的分页查询的存储过程或查询语句了。

  同样的,使用ROW_NUMBER也可以做到分页查询:
DECLARE @rows_per_page AS INTEGER
DECLARE @current_page AS INTEGER
DECLARE @start_row_num AS INTEGER

-- 设置每页的行数
SET @rows_per_page = 20
-- 设置要显示的页号(从1开始)
SET @current_page = 2
-- 设置开始行号
SET @start_row_num = (@current_page - 1) * @rows_per_page

WITH t AS
(
SELECT ROW_NUMBER() OVER(ORDER BY id) AS row_number, *
FROM testtable
)
SELECT * from t
WHERE row_number BETWEEN @start_row_num AND @start_row_num + @rows_per_page  似乎更简单的样子。

[解决办法]
在C#1.x的版本中,一个值类型变量是不可以被赋予null值的,否则会产生异常。在C#2.0中,微软提供了Nullable类型,允许用它定义包含null值(即空值)的数据类型,这对处理数据库中包含可选字段以及很多方面都有很大帮助。
定义Nullable类型

定义一个nullable类型非常类似于定义一个非nullable类型。不同之处在于使用类型修饰符“?”。比如定义一个整型如下:



int myInt = 1;
要使一个整型变量可以存储一个null值,可以如下声明:

int? myNullableInt = 1;
这两个变量看起来似乎是一样的。但事实并非如此。实际上,Nullable类型是一个结构体,它有两个公开可读字段:HasValue和Value。HasValue是一个布尔值,当有值存储时它为真,当变量值为null时HasValue为假。当HavValue为真是时,可以取得变量的值;为假时,当尝试取得变量的值时会抛出一个异常。

现在null是C#的一个关键字,它可以被赋给一个Nullable型变量。下面是对Nullable型变量赋值的两种有效方式。

double? myDouble = 3.14159;
double? myOtherDouble = null;
可以看到,myDouble被赋给一个值,它也可以被赋以null。在第二个语句中,myOtherDouble被初始化为null——在一个非Nullable型变量中这样做会产生异常。

使用nullable类型
一个Nullable型变量可以像一般值类型那样使用。在编译过程中Nullable型变量和非Nullable型变量会进行隐式田转换。就是说我们可以把一个标准整型赋给一个整型Nullable变量,反之亦然。参考下面示例代码:

int? nFirst = null;int Second = 2;
nFirst = Second; // 可以nFirst = 123; // 可以Second = nFirst; //也可以,因为此时nFirst==123
nFirst = null; // 可以Second = nFirst; // 抛出异常, Second 是一个非nullable型变量。 可以看到,只要一个Nullable型变量的值不是null,它就可以和一个非Nullable型变量交换变量的值。如果包含null值,就会抛出异常。为避免异常发生,可以利用Nullable型变量的HasValue属性。
if (nFirst.HasValue) Second = nFirst;

如上所示,如果nFirst 含有一个值,这个赋值语句就会运行;否则,就会跳过。

在Nullable值中使用操作符:Lifed Operators【1】
两个相同类型的Nullable型和非Nullable型变量除了可以相互自动转化之外,还可以通过操作符在它们中进行操作。参考下面代码:

int ValA = 10;int? ValB = 3;
int? ValC = ValA * ValB; //ValC==30
int ValA = 10;int? ValB = null;
int? ValC = ValA * ValB; //ValC==null
int ValA = 10;int? ValB = null;
int? ValC = ValA + ValB; //ValC仍然是null; 可以看到,两个操作数只要有任何一个是null,得到的结果也一定是null,不管是加减还是乘除。当然,如果操作数不是null ,则结果还是按原来操作符运算得到的结果。在上面的代码中,如果ValC不是Nullable类型,情况会怎么样呢?如以下代码:
int ValA = 10;int? ValB = 3;
int ValC = ValA * ValB; // ValC 不是Nullable类型
上面这段代码会抛出一个异常。ValA * ValB的结果是null,它不能被赋给一个非Nullable变量ValC。因为,会产生异常。
关系运算 两个都是null值的Nullable变量被认为是相等的,而一个值为null的变量和其它任何非null值的变量都是不相等的。如下面示例代码:
int abc = 123;
int xyz = 890;

int? def = null;
int? uvw = 123;

Comparison Result
abc == xyz // false
abc == def // false
def == null // true

abc == uvw // true
uvw == null // false
uvw != null // true

在其它关系运算中,如果其中一个或两个操作数为null,则结果一定是false。如下面示例代码(仍然使用上面定义的变量):
Comparison Result
abc > uvw // false, they are equal
abc < def // false, def is null
uvw < def // false, because def is null
def > null // false, because right side is null
uvw > null // false, because right side is null



移除空值 C#2.0同时也提供一个新操作符’??’用来合并空值。其语法格式如下:returnValue = first ?? second;在这个语句中,如果first为非null,则first的值会被赋给returnValue;如果first为null,则second会被赋给returnValue。
注:returnValue可以是Nullable类型也可以是非Nullable类型。
如果要将一个Nullable变量的值赋给一个非Nullable变量,可以用下面方法:int? ValA= 123;int? ValB = null;

int NewVarA = ValA ?? -1;
int NewVarB = ValB ?? -1;
上面这段代码运行完以后,NewVarA的值为123,因为ValA的值不是null。而NewVarB值变为 -1,因为ValB为null。这就允许我们利用一个null值将一个变量转变成一个默认值。在上面的代码中,这个默认值为 -1。

后记:这几天开始学习.NET2.0和C#2.0技术,在Codeguru上面看到这篇文章,本来想把它翻译出来再post到这里,不过翻译了一半就发现有很多专业术语虽然我可以理解它的意思,它却不能用中文正确表达出来,所以就放弃了翻译全文的想法,只是按照自己的理解把文章的意思写出来。有兴趣的朋友可以去看英文原文,其实我发现看英文更加容易理解。
Reference:
[1]Lifed Operators为原文词汇,参考:http://www.codeguru.com/Csharp/.NET/net_data/datagrid/article.php/c10393

[解决办法]
偶也贴一个 ............
很多人都一直问的 ..
关于网页的打印

1、在页面的代码头部处加入JavaScript:

<script language=javascript>
function doPrint() {
bdhtml=window.document.body.innerHTML;
sprnstr="<!--startprint-->";
eprnstr="<!--endprint-->";
prnhtml=bdhtml.substr(bdhtml.indexOf(sprnstr)+17);
prnhtml=prnhtml.substring(0,prnhtml.indexOf(eprnstr));
window.document.body.innerHTML=prnhtml;
window.print();
}
</script>

  2、在页面正文处加上<!--startprint-->与<!--endprint-->标识。也就是在需要用户打印保存的正文所对应的html处附加上。



  3、截取内容部分已完成,现在加个“打印”的链接:<a href="javascript:;" onClick="doPrint()">打印教程</a>
[解决办法]

名称:QQ天气预报代码

HTML code
<IFRAME ID='ifm2' WIDTH='189' HEIGHT='190' ALIGN='CENTER' MARGINWIDTH='0' MARGINHEIGHT='0' HSPACE='0' VSPACE='0' FRAMEBORDER='0' SCROLLING='NO' SRC='http://weather.qq.com/inc/ss248.htm'></IFRAME>
[解决办法]
C# code
/// <summary>        /// 显示消息提示对话框,并进行页面跳转        /// </summary>        /// <param name="page">当前页面指针,一般为this</param>        /// <param name="msg">提示信息</param>        /// <param name="url">跳转的目标URL</param>        public static void ShowAndRedirect(System.Web.UI.Page page,string msg,string url)        {            StringBuilder Builder=new StringBuilder();            Builder.Append("<script language='javascript' defer>");            Builder.AppendFormat("alert('{0}');",msg);            Builder.AppendFormat("top.location.href='{0}'",url);            Builder.Append("</script>");            //page.RegisterStartupScript("message", Builder.ToString());            page.ClientScript.RegisterStartupScript(page.GetType(), "message", Builder.ToString());        }
[解决办法]
假设这样一种模型,显示用GridView,数据源用DataSet。每次获取10条信息,按每页10条分页。
有的时候数据可能不足10条,而客户要求不足10条显示为空行,以下代码解决了这个问题。

C# code
private DataTable FillBlank(int pageSize, DataTable dt)        {            if (dt.Rows.Count < pageSize)            {                for (int i = dt.Rows.Count - 1; i < pageSize; i++)                {                    DataRow dr = dt.NewRow();                    dt.Rows.Add(dr);                }            }            return dt;        }private void BindGrid(DataTable dt){        GridView.DataSource = dt;        GridView.DataBind();}
[解决办法]
给大家一个很[color=#008000]COOL的例子吧。
有的时候我们想把网页动起来,我们希望页面上的某些元素可以移动,称之为拖拽。[/color]
原创
HTML code
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Drag.aspx.cs" Inherits="Test.Drag" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" ><head runat="server">    <title>Untitled Page</title>    <script type="text/javascript" language="javascript">    //为Number增加一个属性,判断当前数据类型是否是数字    Number.prototype.NaN0=function(){return isNaN(this)?0:this;}    //全局变量    var iMouseDown=false;    var dragObject=null;    //获得鼠标的偏移量(对象2-对象1)    function getMouseOffset(target,ev)    {        ev=ev||window.event;        var docPos=getPosition(target);        var mousePos=mouseCoords(ev);        return {x:mousePos.x-docPos.x,y:mousePos.y-docPos.y};    }    //获得事件发生的实际位置----------------------对象1    function getPosition(e)    {        var left=0;        var top=0;        //相对位置累加得到实际位置        while(e.offsetParent)        {            left+=e.offsetLeft+(e.currentStyle?(parseInt(e.currentStyle.borderLeftWidth)).NaN0():0);            top+=e.offsetTop+(e.currentStyle?(parseInt(e.currentStyle.borderTopWidth)).NaN0():0);            e=e.offsetParent;        }        left+=e.offsetLeft+(e.currentStyle?(parseInt(e.currentStyle.borderLeftWidth)).NaN0():0);        top+=e.offsetTop+(e.currentStyle?(parseInt(e.currentStyle.borderTopWidth)).NaN0():0);        return {x:left,y:top};    }    //获得发生事件鼠标的位置----------------------对象2    function mouseCoords(ev)    {        if(ev.pageX||ev.pageY)        {            return {x:ev.pageX,y:ev.pageY};        }        return {x:ev.clientX+document.body.scrollLeft-document.body.clientLeft,y:ev.clientY+document.body.scrollTop-document.body.clientTop};    }    //定义可以拖拽的对象    function makeDragable(item)    {        if(!item) return;        //为可拖拽对象定义一个onmousedown事件的方法        ev=window.event;        item.onmousedown=function(ev)        {            dragObject=this;            mouseOffset=getMouseOffset(this,ev);            return false;        }    }    //定义鼠标点下所调用的方法    function mouseDown(ev)    {        ev=ev||window.event;                var target=ev.target||ev.srcElement;        if(target.onmousedown||target.getAttribute('DragObj'))        {            return false;        }        }    //鼠标抬起后释放对象    function mouseUp(ev)    {        dragObject = null;        //onmouseup事件触发时说明鼠标已经松开,所以设置down变量值为false         iMouseDown = false;    }    //鼠标移动    function mouseMove(ev)    {        ev=ev||window.event;        var target   = ev.target || ev.srcElement;        var mousePos = mouseCoords(ev);        if(dragObject)        {            if(dragObject.style)            {                //移动对象                dragObject.style.left=mousePos.x - mouseOffset.x;                dragObject.style.top= mousePos.y - mouseOffset.y;            }        }        //lMouseState = iMouseDown;        if(dragObject) return false;    }    document.onmousedown=mouseDown;    document.onmousemove=mouseMove;    document.onmouseup=mouseUp;    function moveImg()    {        var img1=document.getElementById('img1');        makeDragable(img1);    }    </script></head><body onload="moveImg()">    <form id="form1" runat="server">    <div>    <img src="a.jpg" alt="" id="img1" style="position:absolute;left:0px;top:0px;" />    </div>    </form></body></html> 


[解决办法]
留个名
<input type="file" onchange="javascript:document.getElementById('image').src=this.value"/>
<input type="image" src="" id="image"/>
这样在选中要上传的图片时,就可以看见自己要上传的了
[解决办法]

HTML code
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="26_虚线效果.aspx.cs" Inherits="_26_虚线效果" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" ><head runat="server">    <title>无标题页</title>   <%-- 方法二--%>    <STYLE type=text/css>.dotline {BORDER-BOTTOM-STYLE: dotted; BORDER-LEFT-STYLE: dotted; BORDER-RIGHT-STYLE: dotted; BORDER-TOP-STYLE: dotted}</STYLE></head><body>    <form id="form1" runat="server">    <div>        <hr style="BORDER-BOTTOM-STYLE: dotted; BORDER-LEFT-STYLE: dotted; BORDER-RIGHT-STYLE: dotted; BORDER-TOP-STYLE: dotted" color=#000000 size=1 />       方法2:        <hr class=dotline color=green size=1 />    </div>    </form></body></html>
[解决办法]
HTML code
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="20_解决刷新后回到顶部的问题.aspx.cs" Inherits="_20_解决刷新后回到顶部的问题" MaintainScrollPositionOnPostback="true" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" ><head runat="server">    <title>无标题页</title></head><body>    <form id="form1" runat="server">    <div>    啊啊<br />     啊啊<br />      啊啊<br />       啊啊<br />        啊啊<br />         啊啊<br />          啊啊<br />          啊啊<br />     啊啊<br />      啊啊<br />       啊啊<br />        啊啊<br />         啊啊<br />          啊啊<br />          啊啊<br />     啊啊<br />      啊啊<br />       啊啊<br />        啊啊<br />         啊啊<br />          啊啊<br />          啊啊<br />     啊啊<br />      啊啊<br />       啊啊<br />        啊啊<br />         啊啊<br />          啊啊<br />          啊啊<br />     啊啊<br />      啊啊<br />       啊啊<br />        啊啊<br />         啊啊<br />          啊啊<br />          啊啊<br />     啊啊<br />      啊啊<br />       啊啊<br />        啊啊<br />         啊啊<br />          啊啊<br />          啊啊<br />     啊啊<br />      啊啊<br />       啊啊<br />        啊啊<br />         啊啊<br />          啊啊<br />        <asp:Button ID="Button1" runat="server" Text="Button" /><br />        <span style="color: #ff3333">在内容页面的Page指令中,加上MaintainScrollPositionOnPostback="true"</span></div>    </form></body></html>
[解决办法]
ENTER键可以让光标移到下一个输入框
<input onkeydown="if(event.keyCode==13)event.keyCode=9">
[解决办法]
HTML code
<input   onkeydown= "if(event.keyCode==13)event.keyCode=9 ">

[解决办法]
我也来一个
数据库字符分割

SQL code
CREATE   FUNCTION fn_Split(@sText nvarchar(4000), @sDelim varchar(20) = ' ')RETURNS @retArray TABLE (idx smallint Primary Key, value varchar(8000))ASBEGINDECLARE @idx smallint,@value nvarchar(4000),@bcontinue bit,@iStrike smallint,@iDelimlength tinyintIF @sDelim = 'Space'BEGINSET @sDelim = ' 'ENDSET @idx = 0SET @sText = LTrim(RTrim(@sText))SET @iDelimlength = DATALENGTH(@sDelim)SET @bcontinue = 1IF NOT ((@iDelimlength = 0) or (@sDelim = 'Empty'))BEGINWHILE @bcontinue = 1  BEGIN--If you can find the delimiter in the text, retrieve the first element and--insert it with its index into the return table.  IF CHARINDEX(@sDelim, @sText)>0  BEGIN  SET @value = SUBSTRING(@sText,1, CHARINDEX(@sDelim,@sText)-1)    BEGIN    INSERT @retArray (idx, value)    VALUES (@idx, @value)    END  --Trim the element and its delimiter from the front of the string.  --Increment the index and loop.SET @iStrike = DATALENGTH(@value) + @iDelimlength  SET @idx = @idx + 1  SET @sText = LTrim(Right(@sText,DATALENGTH(@sText) - @iStrike))    END  ELSE  BEGIN--If you can find the delimiter in the text, @sText is the last value in--@retArray.SET @value = @sText    BEGIN    INSERT @retArray (idx, value)    VALUES (@idx, @value)    END  --Exit the WHILE loop.SET @bcontinue = 0  END  ENDENDELSEBEGINWHILE @bcontinue=1  BEGIN  --If the delimiter is an empty string, check for remaining text  --instead of a delimiter. Insert the first character into the  --retArray table. Trim the character from the front of the string.--Increment the index and loop.  IF DATALENGTH(@sText)>1  BEGIN  SET @value = SUBSTRING(@sText,1,1)    BEGIN    INSERT @retArray (idx, value)    VALUES (@idx, @value)    END  SET @idx = @idx+1  SET @sText = SUBSTRING(@sText,2,DATALENGTH(@sText)-1)    END  ELSE  BEGIN  --One character remains.  --Insert the character, and exit the WHILE loop.  INSERT @retArray (idx, value)  VALUES (@idx, @sText)  SET @bcontinue = 0   ENDENDENDRETURNEND
[解决办法]

[解决办法]
<img src='<%= ResolveUrl("~/image/admin_4bg.gif") %>' alt =""/>

这样可以取得了图片的路径,
这个方便用户用户控件时,显示图片的问题!

读书人网 >asp.net

热点推荐