一个数据表有一个MovieContent字段,就是"电影内容介绍"的意思.我把它读到一个DataList的模版里.因为外观要求统一,我只显示该字段的前面50个字.可MovieContent有些字段的内容不到50个字.我用下面的语句的时候出错:<tr>
<td align="left">
<%#DataBinder.Eval(Container.DataItem,"MovieContent").ToString().Substring(0,50)+"....."%>
</td>
</tr>因为有些不到50个字.这样一来,就抛出导常:
索引和长度必须引用该字符串内的位置。
参数名: length 大家说说,有什么好的思路吗?还有就是,代码后置类的文件中,(.aspx.cs页面)如何和.aspx页面中相互实在变量共享(除了使用Session)???欢迎大家讨论.

解决方案 »

  1.   

    <%#DataBinder.Eval(Container.DataItem,"MovieContent").ToString().Length > 50 ? DataBinder.Eval(Container.DataItem,"MovieContent").ToString().Substring(0,50):DataBinder.Eval(Container.DataItem,"MovieContent").ToString()%>
      

  2.   

    先把"MovieContent"取出来,大于50在Substring(0,50)
      

  3.   

    还有象kittenlpf(Kitten)这样的写法?见识了,呵呵,我都是在cs里写方法的。
      

  4.   

    1.<%#DataBinder.Eval(Container.DataItem,"MovieContent").ToString().PadRight(50).Substring(0,50)+"....."%>2.在代码文件中用 public 变量。
      

  5.   

    把变量的属性设为Protected或者public
      

  6.   

    先写一个函数进行字符截取

    static string cutstring(string input ,int intLen)
    {
    strInput=input.Trim();
    byte[] myByte = System.Text.Encoding.Default.GetBytes(strInput);   
    if(myByte.Length>intLen)
    {
    //截取操作
    string resultStr="";
    for(int i=0;i<strInput.Length;i++)
    {
    byte[] tempByte=System.Text.Encoding.Default.GetBytes(resultStr);
    if(tempByte.Length<intLen-4)
    {
    resultStr+=strInput.Substring(i,1);
    }
    else
    {
    break;
    }     
    }
    return resultStr+"…";
    }
    else
    {
    return strInput;
    }
    }
    然后页面显示时调用该函数
    cutstring(databinder.eval(container,"dataitem.***").tostring(),50)
      

  7.   

    第二个问题就采用普通的ASP方式就可以了
      

  8.   

    MovieContent怎么取出来哈?呵呵.用DataBinder取吗?取不出来哦.我是这样解决的.加了一个函数,虽然这方法土了点,但比较管用:
    <script language="C#" runat="server">
    string TT(string result)
    {
    if(result.length>50)
    return result.SubString(0,49)
    else 
    return result
    }
    </script>把这句改为
    <%#TT(DataBinder.Eval(Container.DataItem,"MovieContent").ToString())+"....."%>kittenlpf(Kitten) 的方法不错,呵呵.当时没有想到.第二个问题我举个例子:
    有一个页面文件,文件名是First.aspx 它的后置代码是First.aspx.cs 现在,在First.aspx.cs的
    Page_Load()事件中,有一个变量,比如string MemberName="Jemmey",那如何在页面文件First.aspx中取得这个变量的值???
      

  9.   

    第1个问题的最简单的,也是最高效的解决办法就是:在 ToString() 和 Substring(0,50) 之间加入 PadRight(50) :<%#DataBinder.Eval(Container.DataItem,"MovieContent").ToString().PadRight(50).Substring(0,50)+"....."%>
      

  10.   

    to 第二个问题,把变量设为public就可以直接访问了