没有通过jquery访问mvc控制器

时间:2015-06-16 16:09:57

标签: jquery asp.net-mvc

chatcontroller代码:这是使用jquery进入用户进行聊天的控制器。

public ActionResult Index(string user, bool? logOn, bool? logOff, string  chatMessage)
        {
            try
            {
                if (chatModel == null) chatModel = new ChatModel();

                //trim chat history if needed
                if (chatModel.ChatHistory.Count > 100)
                    chatModel.ChatHistory.RemoveRange(0, 90);

                if (!Request.IsAjaxRequest())
                {
                    //first time loading
                    return View(chatModel);
                }
                else if (logOn != null && (bool)logOn)
                {
                    //check if nickname already exists
                    if (chatModel.Users.FirstOrDefault(u => u.NickName == user) != null)
                    {
                        throw new Exception("This nickname already exists");
                    }
                    else if (chatModel.Users.Count > 10)
                    {
                        throw new Exception("The room is full!");
                    }
                    else
                    {
                        #region create new user and add to lobby
                        chatModel.Users.Add(new ChatModel.ChatUser()
                        {
                            NickName = user,
                            LoggedOnTime = DateTime.Now,
                            LastPing = DateTime.Now
                        });

                        //inform lobby of new user
                        chatModel.ChatHistory.Add(new ChatModel.ChatMessage()
                        {
                            Message = "User '" + user + "' logged on.",
                            When = DateTime.Now
                        });
                        #endregion

                    }
                    return PartialView("Lobby", chatModel);
                }
                else if (logOff != null && (bool)logOff)
                {
                    LogOffUser(chatModel.Users.FirstOrDefault(u => u.NickName == user));
                    return PartialView("Lobby", chatModel);
                }
                else
                {

                    ChatModel.ChatUser currentUser = chatModel.Users.FirstOrDefault(u => u.NickName == user);

                    //remember each user's last ping time
                    currentUser.LastPing = DateTime.Now;

                    #region remove inactive users
                    List<ChatModel.ChatUser> removeThese = new List<ChatModel.ChatUser>();
                    foreach (Models.ChatModel.ChatUser usr in chatModel.Users)
                    {
                        TimeSpan span = DateTime.Now - usr.LastPing;
                        if (span.TotalSeconds > 15)
                            removeThese.Add(usr);
                    }
                    foreach (ChatModel.ChatUser usr in removeThese)
                    {
                        LogOffUser(usr);
                    }
                    #endregion

                    #region if there is a new message, append it to the chat
                    if (!string.IsNullOrEmpty(chatMessage))
                    {
                        chatModel.ChatHistory.Add(new ChatModel.ChatMessage()
                        {
                            ByUser = currentUser,
                            Message = chatMessage,
                            When = DateTime.Now
                        });
                    }
                    #endregion

                    return PartialView("ChatHistory", chatModel);
                }
            }
            catch (Exception ex)
            {
                //return error to AJAX function
                Response.StatusCode = 500;
                return Content(ex.Message);
            }
        }

            /// <summary>
            /// Remove this user from the lobby and inform others that he logged     off 
            /// </summary>
            /// <param name="user"></param>
            public void LogOffUser(ChatModel.ChatUser user)
            {
                chatModel.Users.Remove(user);
                chatModel.ChatHistory.Add(new ChatModel.ChatMessage()
                {
                    Message = "User '" + user.NickName + "' logged off.",
                    When = DateTime.Now
                });
            }
        }

Index.cshtml:这是要求用户输入用户名并进入聊天组的视图

    <body>
        <div id="YourNickname">
        </div>
        <div id="LastRefresh">
        </div>
        <div id="container">
            <div class="box" id="LoginPanel">
                Nick name :
               <input type="text" id="txtNickName" />
               <button id="btnLogin" value="Start">
                    Start</button>
         </div>
        <div id="Error">
        </div>
        @Ajax.ActionLink("Login", "Index", new { thisUserLoggedOn = "" }, new     AjaxOptions { UpdateTargetId = "container", OnFailure = "LoginOnFailure",       OnSuccess = "LoginOnSuccess" }, new { @id = "LoginButton", @style =    "visibility:hidden;" })
   </body>
     </html>
}

Jquery:在函数中控制器没有被调用..

chat.js

    $(document).ready(function () {

        $("#txtNickName").val("").focus();

        $("#btnLogin").click(function () {
            var nickName = $("#txtNickName").val();
            if (nickName) {
        //it is not getting called
        //call the Index method of the controller and pass the attribute "logOn"
                var href = "/Chat?user=" + encodeURIComponent(nickName);
                href = href + "&logOn=true";
               $("#LoginButton").attr("href", href).click();
                //the nickname is persisted here
                $("#YourNickname").text(nickName);

            alert("functionin");
           }
            alert("functionout");
        });
     });
}

2 个答案:

答案 0 :(得分:0)

您未使用$.ajax$.post或类似内容。见http://api.jquery.com/jquery.ajax/

答案 1 :(得分:0)

正如@robrich所说,你需要使用$ .ajax,如:

$("#btnLogin").click(function () {
    var nickName = $("#txtNickName").val();
    if (nickName) {
    $.ajax({
              url: '/Chat/Index',
              type: 'GET',
              data: {user:nickname,logOn:true,logOff:false,chatMessage:''},
              success: function(data) {
                //called when successful                        
              },
              error: function(e) {
                //called when there is an error
                //console.log(e.message);
              }
            });
}
)};