【问题标题】:mvc controller is not getting accessed via jquery未通过 jquery 访问 mvc 控制器
【发布时间】:2015-06-19 10:37:31
【问题描述】:

聊天控制器代码:这是使用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:在函数中控制器没有被调用..

聊天.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");
        });
     });
}

【问题讨论】:

  • 你生成的 HTML 文件是什么

标签: jquery asp.net-mvc


【解决方案1】:

您没有使用 $.ajax$.post 或类似名称。见http://api.jquery.com/jquery.ajax/

【讨论】:

    【解决方案2】:

    正如@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);
                  }
                });
    }
    )};
    

    【讨论】:

    • 它给出错误 GET localhost:7537/… 404 (Not Found) 并且错误指向这里 jquery.js 文件 -> xhr.send( ( options.hasContent && options.data ) || null ) ;
    • 我正在尝试在我的 mvc 项目中制作这个模块link
    • 我编辑了我的示例,如果代码在同一个视图中,则不需要设置控制器,但如果 javascript 不在,则需要编写绝对路由。
    猜你喜欢
    • 1970-01-01
    • 2016-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多