asp.net <%#eval(“id”)%>

在asp.net中数据绑定表达式写成<%#eval(“name”)%>,当“name”字段在所查询的SQL语句中不存在时,此时会提示:DataBinding:“Syste... 在asp.net 中数据绑定表达式写成<%#eval(“name”)%> ,当“name”字段在所查询的SQL语句中不存在时,此时会提示:
DataBinding:“System.Data.DataRowView”不包含名为“Name”的属性。
我想要实现的是,出现检测不到某个字段时,直接将其替换掉,以下是我写的代码,似乎没有起到作用:
html代码:
<%
if (!string.IsNullOrEmpty(checkbaindName("Name")))
{%>
<td><%#Eval("Name") %></td>
<%}
else
{
string s = "<td>你没有查看权限</td>";
Response.Write(s);
}%>
cs代码:
public string checkbaindName(string str_name)
{
if (str_includes.IndexOf(str_name) > 0)
{
return str_name;
}
else
{
return "";
}
}
展开
 我来答
csd314
2015-07-02 · TA获得超过493个赞
知道小有建树答主
回答量:730
采纳率:50%
帮助的人:542万
展开全部
首先,不知道你这(str_includes.IndexOf(str_name) > 0)这个判断是否可靠,如果你使用了DataTable,那为什么不之间检查DataTable是否含有这个字段
其次,你又用了Eval输出,有用了Response.Write输出是为啥
再次,你说没起作用具体表现如何,截图示意
要排查问题其实蛮简单,逐步调试即可
追问
我换了一种思维方式,这个问题我已经解决了。不过我还是很有兴趣问您一下,关于这种绑定方式如果出现所查字段被意外删除了,为了防止这种现象,可以在找不到所要找的字段时,用其他的方式替代吗?就类似try{}catch(){}这种思维方式的。或许我的这种想法在.NET里目前还没有做出这样的处理?
追答
除了try...catch其实没有什么别的更好的方法

因为Eval所支持的表达式比较复杂,一是DataTable字段,二是类的属性,再是类的索引器,而且Eval是可以访问子对象的如Eval("propertyA.subPropertyB")
支持这么多模式的情况下想知道参数是否有效是很困难的,而且不排除未来支持更多模式,所以用try...catch是很靠谱的
翻过来说,程序是很严谨的东西,后台提供什么数据前台就绑定什么数据,为什么要绑定后台没有的数据,这是违背编程基本的严谨要求的,就像你这通过判断字段存在否来确定有没有权限这本身就是个拙劣的设计,有没有权限应该用数据表达而非数据结构表达
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式