C# 使用ASP.NET MVC实现@ention(标记朋友)

C# 使用ASP.NET MVC实现@ention(标记朋友),c#,jquery,.net,asp.net,asp.net-mvc,C#,Jquery,.net,Asp.net,Asp.net Mvc,我想知道是否有任何关于如何使用ASP.NETMVC和jquery实现标记系统(如Facebook的@Reference)的文章。基本上,我认为我需要解析@字符后面的字符串(发布时,这将发送电子邮件通知,阅读时,这将链接用户)。我可能需要某种自动完成的jquery插件 如果有人已经经历了这个过程,我会很感激一些提示 谢谢。*.ascx文件: /* <div id="tf_contentbox" contenteditable="true" onclick="SetFocus()"> &

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

如果有人已经经历了这个过程,我会很感激一些提示

谢谢。

*.ascx文件:

/*
<div id="tf_contentbox" contenteditable="true" onclick="SetFocus()">
</div>
<div id="tf_display">
</div>
<div id="tf_msgbox">
</div>
*/
您还应该使用一些js函数:

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();
});
var start=/@/ig;
var-word=/@(\w+)/ig;
$(“#tf_contentbox”).live(“keyup”,函数(){
var content=$(this.text();/$(“#tf_contentbox”).val();
var go=content.match(开始);
变量名称=content.match(word);
var dataString='searchword='+名称;
如果(go!=null&&go.length>0){
$(“#tf#msgbox”).slideDown('show');
$(“#tf_display”).slideUp('show');
$(“#tf#msgbox”).html(“键入您朋友的姓名…”);
如果(name!=null&&name.length>0){
$.ajax({
类型:“POST”,
url:“”,
//主页-控制器,FindFriendsFortaging-操作。请参阅下文。
数据:“friendNamePart=“+name,
//friendNamePart-FindFriendForTagging的参数
cache:false,
成功:函数(html){
$(“#tf#msgbox”).hide();
$(“#tf_display”).html(html).show();
}
});
}
}
返回false;
});
$(“.addname”).live(“单击”),函数(){
var username=$(this.attr('title');
var userId=$(this.attr('value');
var old=$(“#tf_contentbox”).html();
var内容=旧。替换(单词“”);
$(“#tf_contentbox”).html(内容);
var E=“”;
$(“tf#u contentbox”)。追加(E);
$(“#tf_display”).hide();
$(“#tf#msgbox”).hide();
$(“#tf#contentbox”).focus();
});
控制器的方法:

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();
}
公共字符串findfriendsfortaging(字符串friendNamePart)
{
friendNamePart=friendNamePart.Remove(0,1);
//FriendManager类的描述见下文。
IQueryable model=new FriendManager().GetFriendsByDisplayName(friendNamePart).Take(10);
StringBuilder sb=新的StringBuilder();
foreach(模型中的var用户)
{
某人加上(“”);
sb.附录格式(“
”); 某人加上(“”); sb.Append(HtmlHelperExtensions.ShowTypeName(user.UserType.ToString()); 某人加上(“”); 某人加上(“”); } 使某人返回字符串(); }
班级经理代码:

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;
    }
}
密封的公共类FriendManager
{
private UsersDataContext dbContext=new UsersDataContext();
公共IQueryable GetFriendsByDisplayName(字符串名称部分)
{
//假定类UsersDataContext(dbml文件)存在
可预测的结果=
其中(u=>u.DisplayName.ToLower().Contains(namePart.ToLower());
返回结果;
}
}

您可能想看一看,我们有类似的功能,包括自动完成、通知等。但老实说,这很简单-只需几个正则表达式就可以了检查这个问题`
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;
    }
}