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");
});
});
}
答案 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);
}
});
}
)};