2014-04-01 1 views
0

컨트롤러 클래스에 두 개의 변수가 있습니다. 첫 번째 변수는 currentUserId이며, 웹 사이트에 로그인 한 현재 사용자를 저장합니다. 두 번째 변수는 currentRoomId이며 현재 사용자가있는 현재 대화방을 추적합니다. 문제는 사용자가 로그인 할 때 정확한 변수를 두 변수에 저장하지만 범위를 벗어난 후에 발생합니다 값을 저장하지 않습니다. 기본 작업은 두 변수를 모두 추적하는 것입니다. 나는 이것을하는 가장 좋은 방법이 무엇인지 모르겠습니다. 여기 C# 컨트롤러와 뷰에서 두 변수 추적하기

내가 현재 가지고있는 것입니다 :

내 컨트롤러 :

여기
using System; 
using System.Collections.Generic; 
using System.Data; 
using System.Linq; 
using System.Web; 
using System.Web.Configuration; 
using System.Web.Mvc; 
using System.Web.Script.Serialization; 
using Microsoft.Ajax.Utilities; 
using SignalRChat.Models; 
using System.Web; 

namespace SignalRChat.Controllers 
{ 
    public class HomeController : Controller 
    { 

     ChatDBEntities DB = new ChatDBEntities(); 
     ChatDBEntities1 DB_Uno = new ChatDBEntities1(); 
     ChatDBEntities2 DB_Dos = new ChatDBEntities2(); 
     int currentUserId = -1; 
     int currentRoomId = 1; 

     public ActionResult Chat() 
     { 

      return View(); 
     } 

     public ActionResult Users() 
     { 
      return View(); 
     } 

     public ActionResult Index() 
     { 
      return View(); 
     } 

     public ActionResult About() 
     { 
      ViewBag.Message = "Your application description page."; 

      return View(); 
     } 

     public ActionResult Contact() 
     { 
      ViewBag.Message = "Your contact page."; 

      return View(); 
     } 

     [HttpPost] 
     public bool AddMessage(string messageCont) 
     { 
      var authorId = (int) Session["currentUserId"]; 
      var message = new ChatMessage(); 
      message.Author = DB_Dos.ChatRoomUsers.Find(authorId).UserName; // Add Code to get the actual user 
      message.AuthorId = authorId; ; //Add Code to get current user Id 
      message.Message = messageCont; 
      message.MessageDate = DateTime.UtcNow; 
      message.RoomId = (int)Session["currentRoomId"]; ; //Add Room Code 
      message.RoomName = DB_Uno.ChatRooms.Find(currentRoomId).RoomName; // Get actual name based on id 

      try 
      { 
       DB.ChatMessages.Add(message); 
       DB.SaveChanges(); 
       return true; 
      } 
      catch (Exception) 
      { 
       return false; 
      } 
     } 

     [HttpGet] 
     public string GetMessages(int roomId) 
     { 
      Session["currentRoomId"] = roomId; 
      var messages = (from message in DB.ChatMessages where message.RoomId == roomId orderby message.MessageDate ascending select message).ToList(); 
      var serializer = new JavaScriptSerializer(); 
      string json = serializer.Serialize(messages); 
      return json; 
     } 

     [HttpGet] 
     public int GetCurrentRoomId() 
     { 
      return currentRoomId; 
     } 

     [HttpGet] 
     public int GetCurrentUserId() 
     { 
      return currentUserId; 
     } 

     [HttpPost] 
     public bool AddRoom(string chatRoom) 
     { 
      var room = new ChatRoom(); 

      room.IsActiveRoom = true; 
      room.RoomName = chatRoom; 
      room.isDefaultRoom = false; 
      room.UserCount = 1; 
      room.Id = -1; 
      try 
      { 
       DB_Uno.ChatRooms.Add(room);  
       DB_Uno.SaveChanges(); 
       return true; 
      } 
      catch (Exception) 
      { 
       return false; 
      } 
     } 

     [HttpGet] 
     public string GetRooms() 
     { 
      var rooms = DB_Uno.ChatRooms; 
      var serializer = new JavaScriptSerializer(); 
      string json = serializer.Serialize(rooms); 
      return json; 
     } 

     public ActionResult AddUser() 
     { 
      return View(); 
     } 

     [HttpPost] 
     public ActionResult AddUser(ChatRoomUser user) 
     { 
      var users = DB_Dos.ChatRoomUsers; 

      try 
      { 
       user.LastActivity = DateTime.UtcNow; 
       user.RoomId = 1; 
       user.RoomName = "General Chat"; 
       users.Add(user); 
       DB_Dos.SaveChanges(); 
       currentUserId = user.UserId; 
       return View("Chat"); 
      } 
      catch(Exception) 
      { 
       return View(); 
      } 
     } 

     public ActionResult Login() 
     { 
      return View(); 
     } 

     [HttpPost] 
     public ActionResult Login(ChatRoomUser LUser) 
     { 
      var userId = (from u in DB_Dos.ChatRoomUsers where u.UserName == LUser.UserName select u.UserId).ToList(); 
      var user = DB_Dos.ChatRoomUsers.Find(userId[0]); 
      if(user.password == LUser.password) 
      { 
       currentUserId = user.UserId; 
       user.LastActivity = DateTime.UtcNow; 
       Session["currentRoomId"] = user.RoomId; 
       Session["currendUserId"] = user.UserId; 
       DB_Dos.SaveChanges(); 
       return View("Chat"); 
      } 
      else 
      { 
       return View(); 
      } 
     } 
    } 
} 

내보기입니다 :

@{ 
    ViewBag.Title = "Chat"; 
} 
<h2>General Chat</h2> 

<div id="wrapper"> 

    <div id="upper-wrapper"> 
     <div id="available-rooms-dialog"> 
      <h4>Available Rooms</h4> 
     </div> 
     <form id="ava-rooms"> 
      <input type="button" onclick="GetRoomName()" id=" createroom" value="Create Room" /> 
     </form> 
     <div id="discussion-dialog"> 
      <textarea rows="30" cols="50" id="discussion"></textarea> 
     </div> 
    </div> 
    <div id="message-dialog"> 
     <textarea rows="3" id="message">Type your message</textarea> 
     <br/> 
     <input type="button" id="sendmessage" value="Post" /> 
     <input type="hidden" id="displayname" /> 
     <input type="checkbox" id="enter-sends-message"/> 
     Enter sends message 
    </div> 
</div> 
@section scripts 
    { 
    <script src="~/Scripts/jquery.signalR-2.0.2.min.js"></script> 
    <script src="~/signalr/hubs"></script> 
    <script type="text/javascript"> 
    var json; 
    var currentUserId; 
    var CurrentRoomId; 
    var MyVariable = '@ViewBag.MyVariable'; 


    $(function() { 
     LoadRooms(); 
     // Reference the auto-generated proxy for the hub. 
     var chat = $.connection.chatHub; 
     // Create a function that the hub can call back to display messages. 
     chat.client.addNewMessageToPage = function (name, message) { 
      // Add the message to the page. 
      $.ajax(
      { 
       type: "Get", 
       url: "@Url.Action("GetCurrentRoomId", "Home")", 
       success: function (data) 
       { 
        currentRoomId = data; 
       } 
      }); 

      $.ajax(
      { 
       type: "Get", 
       url: "@Url.Action("GetCurrentUserId", "Home")", 
       success: function (data) 
       { 
        currentUserId = data; 
       } 
      }); 

      //TODO: Add Record to Server 
      $.ajax(
      { 
       type: "Post", 
       url: "@Url.Action("AddMessage", "Home")", 
       data: { messageCont: message.toString()}, 
       success: function (data) { 
        for (var i = 0; i < data.length; i++) { 
         //access with data[i].modelattribute 
        } 
       } 
      }); 

      $.ajax(
      { 
       type: "Get", 
       url: "@Url.Action("GetMessages", "Home")", 
       success: function (data) { 
        json = data; 
        var obj = JSON.parse(json); 
        for (var i = 0; i < data.length; i++) { 
         //access with data[i].modelattribute 
         $('#discussion').append(htmlEncode(obj[i].Author) + " : " + htmlEncode(obj[i].Message) + "\r\n"); 
        } 
       } 
      }); 

     }; 

     // Get the user name and store it to prepend to messages. 
     // Set initial focus to message input box. 
     $('#message').focus(); 
     // Start the connection. 
     $.connection.hub.start().done(function() { 
      $('#sendmessage').click(function() { 
       // Call the Send method on the hub. 
       chat.server.send($('#displayname').val(), $('#message').val()); 
       // Clear text box and reset focus for next comment. 
       $('#message').val('').focus(); 
      }); 
     }); 
    }); 

    // This optional function html-encodes messages for display in the page. 
    function htmlEncode(value) { 
     var encodedValue = $('<div />').text(value).html(); 
     return encodedValue; 

    } 
    function GetRoomName() { 
     var newRoomName = prompt('Enter a new Room Name', 'Name'); 
     $.ajax(
     { 
      type: "Post", 
      url: "@Url.Action("AddRoom", "Home")", 
      data: { chatRoom: newRoomName }, 
      success: function (data) { 
       for (var i = 0; i < data.length; i++) { 
        //access with data[i].modelattribute 
       } 
      } 
     }); 
    } 

     function LoadRooms() { 

      $.ajax(
      { 
       type: "Get", 
       url: "@Url.Action("GetRooms", "Home")", 
       success: function (data) { 
        json = data; 
        var obj = JSON.parse(json); 
        for (var i = 0; i < data.length; i++) { 
         //access with data[i].modelattribute 
         // Add an Onlick event to this statment that calls LoadRoomMessages 
         //onclick="GetRoomName()" 
         $('#ava-rooms').append("<input type=\"button\" " +"onclick=LoadRoomMessages(" + obj[i].Id + ") " + "id=\"" + obj[i].RoomName +"\"" + "value=\"" + obj[i].RoomName +"\" />"); 
        } 
       } 
     }); 

     } 

     function LoadRoomMessages(id) 
     { 
      $.ajax(
      { 
       type: "Get", 
       url: "@Url.Action("GetMessages", "Home")", 
       data: { roomId: id }, 
       success: function (data) 
       { 
         $('#discussion').empty(); 
         json = data; 
         var obj = JSON.parse(json); 
         for (var i = 0; i < data.length; i++) 
         { 
          $('#discussion').append(htmlEncode(obj[i].Author) + " : " + htmlEncode(obj[i].Message) + "\r\n"); 
         } 
       } 
      }); 
     } 

</script> 
} 
} 

어떤 제안이 있습니까?

답변

4

Session을 사용하여 이러한 변수를 저장할 수 있습니다. 세션이 만료되지 않는 한 모든 컨트롤러 또는보기에서 사용할 수 있습니다. 면도칼보기

@Session["currentRoomId"] 
+0

에 세션 변수를 얻으려면

int roomId = (int)Session["currentRoomId"]; 

내가 필요 정확히 무슨 소리 그 컨트롤러의 세션 변수를 얻으려면

Session["currentRoomId"] = roomId; 

는 컨트롤러에 세션 변수를 설정하려면 . 어떻게 구현할 수 있습니까? – user977154

+0

좋습니다. 고맙습니다! 그걸로 시작하겠습니다. – user977154

+0

Session에 대한 참고 자료를 알고 있습니까? 위의 참조를 사용할 때 세션 키워드가 없기 때문에. – user977154

관련 문제