缩短使用asp:repeater和Buildlink创建的链接(Eval

时间:2015-06-03 15:48:51

标签: c# asp.net

之前我问过类似的问题,我需要将链接更改为其他内容,但实际上我需要缩短链接而不是替换它。

所以我需要缩短链接,当它们超过...说... 50个字符。我知道如何更改链接,但无法弄清楚如何缩短链接。

例如:http://www.google.com会缩短为http://google ...

我的代码:

<%# BuildLink(Eval("TaskDefinition.Url").ToString(),Eval("TaskInstanceID").ToString())%>

我已经完成了这项工作,取代了链接。但我需要缩短它,而不是取而代之。

<asp:HyperLink runat="server"  
    NavigateUrl='<%# BuildLink(Eval("TaskDefinition.Url").ToString(), Eval("TaskInstanceID").ToString())%>'>
    My Link    
</asp:HyperLink>

我的BuildLink方法:

public string BuildLink(string baseUrl, string taskInstanceId)
{
    if (!string.IsNullOrEmpty(baseUrl))
    {

        string parms =
            "taskinstanceid=" + taskInstanceId +
            "&callback=" + GetCallBackUrl();

        string url = baseUrl.Contains("?")
            ? baseUrl + "&" + parms
            : baseUrl + "?" + parms;

        bool isUnc = false;
        try
        {
            Uri uri = new Uri(baseUrl);
            isUnc = uri.IsUnc;
        }
        catch {  }

        string link;
        if (isUnc)
        {
            link = "<a href='" + baseUrl + "' >" + baseUrl + "</a>";
        }
        else
        {
            link = "<a href='" + url + "' >" + baseUrl + "</a>";
        }
        return link;
    }
    return "";
}

这是当前的观点。它所属的一切

这是用JF代码生成的视图 enter image description here

此外,即使链接不是50&gt;,链接也会缩短。这很奇怪...我不喜欢asp中继器。

1 个答案:

答案 0 :(得分:1)

<asp:Hyperlink>还可让您设置要显示的文字。与构建链接的方式类似,您也可以修剪文本。

首先,设置text属性。您还可以删除超链接标记之间的文本,因为text属性会为您执行此操作。

<asp:HyperLink runat="server"  
    NavigateUrl='<%# BuildLink(Eval("TaskDefinition.Url").ToString(), Eval("TaskInstanceID").ToString())%>'
    Text='<%# TrimLink(Eval("TaskDefinition.Url").ToString(), Eval("TaskInstanceID").ToString())%>'>  
</asp:HyperLink>

然后,在方法后面创建代码。在此方法中,您是否逻辑获取将要显示的URL的完整文本。检查该文本的长度。如果长度超过50,Substring()长度为50个字符,并将一些省略号连接到其上。

public string TrimLink(string baseUrl, string taskInstanceId)
{
    string urlText = "";

    // do your logic to get the full url

    if(urlText.Length > 50)
    {
        urlText = urlText.Substring(0, 50);
        urlText = urlText + "...";
    }

    return urlText;
}

不要返回整个超链接以用作<asp:Hyperlink>的网址,而是尝试仅返回网址。我想知道是否所有额外的字符都被无意地用作其他控件的关闭。在BuildLink中,请改为执行此操作。

if (isUnc)
{
    link = baseUrl;
}
else
{
    link = url;
}
return link;