今天想做个repeater用xml做数据源的东西,上网查了下资料还真是少,于是就自己动起手来,其实是很简单那。
关键就是明白数据控件中Container.DataItem的含义和用法即可。先贴上代码。
xml:
<?xml version="1.0" encoding="UTF-8"?>
<ThreadList Count="476" fid="103">
<Thread tid="396133" uid="279005" subject="含义和用法即"></Thread>
<Thread tid="396132" uid="279005" subject="字母诠释下的夏奈尔></Thread>
<ThreadList>
aspx.cs代码:
XmlDocument doc = new XmlDocument();
doc.LoadXml("xml");
this.repTopicList.DataSource = xmldoc.DocumentElement.ChildNodes;
this.repTopicList.DataBind();
前台绑定:
引入命名空间<%@ Import Namespace="System.Xml" %>
<asp:Repeater ID="repTopicList" runat="server">
<ItemTemplate>
<span><%# ((XmlNode)Container.DataItem).Attributes["subject"].Value%><span><br />
</ItemTemplate></asp:Repeater>
就这么简单,解释下,Container.DataItem取到是什么东西呢?
跟你绑定的数据源有关,如果是datatable那就是datarow,list数组的话就是key,value对,这里是xmlnodelist,所以要先转为xmlnode,后面我想大家都会了吧,
是取属性的值还是节点值都比较简单了,还可以使用xpath用于查询比较复杂的节点。
另:这种用法看论坛上有人说速度比较的慢
自定义404错误页面是提供用户体验的很好的做法,但在应用过程中往往并未注意到对搜索引擎的影响,譬如:错误的服务器端配置导致返回“200”状态码或自定义404错误页面使用Meta Refresh导致返回“302”状态码。正确设置的自定义404错误页面,不仅应当能够正确地显示,同时,应该返回“404”错误代码,而不是“200”或“302”。虽然对访问的用户而言,HTTP状态码究竟是“404”还是“200”来说并没有什么区别,但对搜索引擎而言,这则是相当重要的。
使用web.config中的customErrors来做的话并不好,因为asp.net会在返回的head头上加上302状态,即使你在自定义的404页面上设置Response.StatusCode = 404也是无法消除asp.net加的302错误。因此我的办法就是在全局错误处理Application_Error中设置并返回html代码。
这是我的代码:
为什么要加那么多的“页面没有找到”呢?是因为ie有个BUG:如果404页面大小不够521b的话会被ie的默认内容替换。
另个需要注意的是meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />这个必须在title标签前,否则ie6下不能跳转。
这是我在做自定义404错误页面的心得,各位达人还有什么更好的办法。
如果要运行这个代码你需要先到http://code.google.com/apis/ajaxsearch/signup.html申请一个key替换代码"key=你在GOOGLE上申请到的KEY"中的key后的参数,就可运行了。
<!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>
<title>无标题页</title>
</head>
<body>
<div>
<script src="http://www.google.com/uds/api?file=uds.js&v=1.0&key=你在GOOGLE上申请到的KEY"
type="text/javascript"></script>
<script type="text/javascript">
function OnSearchLoad(searchStr)
{
// Create a search control
var searchControl = new GSearchControl();
var options = new GsearcherOptions();
options.setExpandMode(GSearchControl.EXPAND_MODE_OPEN);
var WebSearch = new GnewsSearch();
searchControl.addSearcher(WebSearch,options);
WebSearch.setSearchCompleteCallback(this,GetResult,[WebSearch]);
//searchControl.addSearcher(new GblogSearch(),options); 这是blog搜索
//searchControl.addSearcher(new GnewsSearch(),options); 这是资讯搜索 还有其他好多类,可以查看google的api
searchControl.setResultSetSize(GSearch.LARGE_RESULTSET); //显示多少个,只能是4个和8个。。。。。。。
searchControl.draw(document.getElementById("searchcontrol"));
searchControl.execute(searchStr);
}
//GSearch.setOnLoadCallback(OnLoad);
function Search()
{
OnSearchLoad(document.all.searchKey.value);
}
function GetResult(searcher)
{
//返回结果,可以个性化的设置
var strContent = "";
if( searcher.results && searcher.results.length>0)
{
for(var i=0;i<searcher.results.length;i++)
{
var result = searcher.results[i];
strContent += "<br />"+result.title+"<br />来自:"+result.publisher+" <a href='"+result.unescapedUrl+"'>"+result.unescapedUrl+"</a><br />" +result.content+"<br />——"+result.publishedDate +"<br />";
}
}
document.all.Div1.innerHTML = strContent;
}
</script>
关键词:
<input type="text" id="searchKey" /> <span onclick="Search()">搜索</span>
<div id="searchcontrol" style="display: none;">
</div>
<div id="Div1">
</div>
</div>
</body>
</html>

