请各位认真看完后再回答,谢谢!代码:protected void news_list_ItemDataBound(object sender, System.Web.UI.WebControls.RepeaterItemEventArgs e)
    {
        DataRowView row;
        Label mCon;
        int StartNum = 0,EndNum=0;
        string Content;
        if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
        {
            row = (DataRowView)e.Item.DataItem;
            mCon = (Label)e.Item.FindControl("Label_con");
            
            Content = stripHtml(row["content"].ToString());
            StartNum = Content.IndexOf(SKeywords);
            if (StartNum <= 0)
               StartNum = 0;
            EndNum = StartNum + 10;
            if (EndNum > Content.Length)
                EndNum = Content.Length;
            
            Content = Content.Substring(StartNum, EndNum);
            mCon.Text = Content;   
        }
    } 
stripHtml(row["content"].ToString())是去除HTML格式
我把StartNum改成0就不报错了,可是我动态读取StartNum的值,就会报错:索引和长度必须引用该字符串内的位置。
参数名: length 请问,是什么问题?

解决方案 »

  1.   

    你对string.SubString函数的用法理解错了。你认为第一个参数是开始index,第二个是结束index,是不?错了,第一个是开始index,第二个应该是长度(length)!
    也就是说,Content.Substring(StartNum, EndNum)语句的含义是从第StartNum个字符开始,截取长为EndNum的字符串。看你的意思应该是截取10长的字符串,所以应该这么写:Content.Substring(StartNum, 10); 当然,还要判断是否够长:if(Content.Length-StartNum >= 10)
    Content.Substring(StartNum, 10); 
    else
    Content.Substring(StartNum); // 截取到结尾
      

  2.   

    StartNum = Content.IndexOf(SKeywords);
    这个语句里做为参数的“SKeywords”是哪里来的
      

  3.   

    Content = Content.Substring(StartNum, EndNum); 改成 Content = Content.Substring(StartNum, EndNum-StartNum); 这样就可以了.
      

  4.   

    这样改,
    Content = Content.Substring(StartNum, EndNum); 
    改成
    Content = Content.Substring(StartNum, EndNum - StartNum);