首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用ASP.NET MVC实现@mention (标记好友)

使用ASP.NET MVC实现@mention (标记好友)
EN

Stack Overflow用户
提问于 2011-05-11 02:07:36
回答 1查看 2.8K关注 0票数 1

我想知道是否有任何关于如何使用ASP.NET、MVC和jquery实现标记系统(比如Facebook的@提及)的文章。基本上,我认为我需要解析@字符后面的字符串(在发帖时,这将发送电子邮件通知,而阅读时,这将链接用户)。我可能需要某种自动补全的jquery插件。

如果有人已经经历了这个过程,我会感谢一些小贴士!

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2011-08-04 02:57:32

*.ascx文件:

代码语言:javascript
复制
/*
<div id="tf_contentbox" contenteditable="true" onclick="SetFocus()">
</div>
<div id="tf_display">
</div>
<div id="tf_msgbox">
</div>
*/

css样式:

代码语言:javascript
复制
/* Styles for taggig friends
----------------------------------------------------------*/

#tf_contentbox
{
    width: 458px;
    height: 50px;
    border: solid 2px #cdcdcd;
    font-family: Arial, Helvetica, sans-serif;
    font-size: 14px;
    margin-bottom: 6px;
    text-align: left;
}

.tf_img
{
    float: left;
    width: 150px;
    margin-right: 10px;
    text-align: center;
}
#tf_msgbox
{
    border: solid 1px #dedede;
    padding: 5px;
    display: none;
    background-color: #f2f2f2;
}
.tf_red
{
    color: #cc0000;
    font-weight: bold;
}
a
{
    text-decoration: none;
}
a:hover
{
    text-decoration: none;
}
#tf_display
{
    display: none;
    border-left: solid 1px #dedede;
    border-right: solid 1px #dedede;
    border-bottom: solid 1px #dedede;
    overflow: hidden;
}
.tf_display_box
{
    padding: 4px;
    border-top: solid 1px #dedede;
    font-size: 12px;
    height: 30px;
}

.tf_display_box:hover
{
    background: #3b5998;
    color: #FFFFFF;
}
.tf_display_box a
{
    color: #333;
}
.tf_display_box a:hover
{
    color: #fff;
}
#tf_container
{
    margin: 50px;
    padding: 10px;
    width: 460px;
}
.tf_image
{
    width: 25px;
    float: left;
    margin-right: 6px;
}

此外,您还应该使用一些js函数:

代码语言:javascript
复制
var start = /@/ig;
var word = /@(\w+)/ig;

$("#tf_contentbox").live("keyup", function () {
    var content = $(this).text();//$("#tf_contentbox").val();
    var go = content.match(start);
    var name = content.match(word);
    var dataString = 'searchword=' + name;

    if (go != null && go.length > 0) {
        $("#tf_msgbox").slideDown('show');
        $("#tf_display").slideUp('show');
        $("#tf_msgbox").html("Type the name of your friend...");
        if (name != null && name.length > 0) {
            $.ajax({
                type: "POST",
                url: "<% = Url.Action("FindFriendsForTagging", "Home") %>",
                // Home - controller, FindFriendsForTagging - action. See below.
                data: "friendNamePart=" + name,
                // friendNamePart - parametr of FindFriendsForTagging
                cache: false,
                success: function (html) {
                    $("#tf_msgbox").hide();
                    $("#tf_display").html(html).show();
                }
            });

        }
    }
    return false;
});

$(".addname").live("click", function () {
    var username = $(this).attr('title');
    var userId = $(this).attr('value');
    var old = $("#tf_contentbox").html();
    var content = old.replace(word, "");
    $("#tf_contentbox").html(content);
    var E = "<a class='tf_red' contenteditable='false' href='" + userId + "'>" + username + "</a>";        
    $("#tf_contentbox").append(E);
    $("#tf_display").hide();
    $("#tf_msgbox").hide();
    $("#tf_contentbox").focus();
});

控制器的方法:

代码语言:javascript
复制
public string FindFriendsForTagging(string friendNamePart)
{
    friendNamePart = friendNamePart.Remove(0, 1);
    // Descrption of class FriendManager see below.
    IQueryable<User> model = new FriendManager().GetFriendsByDisplayName(friendNamePart).Take(10);
    StringBuilder sb = new StringBuilder();

    foreach (var user in model)
    {
        sb.Append("<div class=\"tf_display_box\" align=\"left\">");
        sb.AppendFormat("<a href=\"#\" class=\"addname\" title=\"{0}\" value=\"{1}\">", user.DisplayName, user.UserId.ToString());
        sb.Append(user.DisplayName.ToLower().Replace(friendNamePart.ToLower(), string.Format("<b>{0}</b>", friendNamePart.ToLower())));
        sb.Append("</a><br>");
        sb.Append("<span style=\"font-size:9px; color:#999999\">");
        sb.Append(HtmlHelperExtensions.ShowTypeName(user.UserType.ToString()));
        sb.Append("</span>");
        sb.Append("</div>");
    }

    return sb.ToString();
}

FriendManager类的代码:

代码语言:javascript
复制
sealed public class FriendManager
{
    private UsersDataContext dbContext = new UsersDataContext();

    public IQueryable<User> GetFriendsByDisplayName(string namePart)
    {
        // assumes the existence of the class UsersDataContext (dbml file)
        IQueryable<User> result =
            this.dbContext.Users.Where(u => u.DisplayName.ToLower().Contains(namePart.ToLower()));

        return result;
    }
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5954408

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档