2009-10-18 2 views
1

StackOverflow가 사용자의 활동에 따라 멋진 상태 표시 줄 메시지를 표시하는 방법에 유의하십시오. (톱 페이지의 오렌지 바) 나는 똑같이하기를 바라고 있지만 어떻게 잘 모르겠다.ASP.NET MVC 페이지에 오류 메시지를 다시 표시하려면 어떻게합니까?

이제 ASP.NET MVC 1.0을 사용하여 UI에 유효성 검사 오류를 표시하는 방법을 알았습니다. 너무 어렵지 않습니다. 하지만 상태 표시 줄을 보여주고 싶다면 (jQuery가 무엇인지 불확실합니다) jQuery를 사용하여 작업을 완료했다고 생각하면 어떻게 할 수 있습니까?

은 더욱, 나는 또한

예를 들어 다른 액션을 호출 한 후 그것을하고 싶습니다.

public ActionResult AuthoriseWithTwitter(string nickname) 
{ 
    // Authorise, etc. etc. 
    .... 

    // If we have a Twitter OAuth Access token 
    // (ie. we've come BACK from twitter OK) 
    // then go back to the Index action, but display a status bar 
    // message saying 'done/thanks/got it/etc..' 
    return RedirectToAction("Index", new[] { nickname }); 
} 

어떻게 메시지를 해당 동작으로 전달하고 해당 상태 표시 줄에 메시지를 표시할지 모르겠습니다.

건배!

답변

3

여러 가지 방법

  1. 이 TempData에 [ "statusmsg을"]를 넣고 액션 또는보기에 거기에서을 선택합니다. 단점 : 사용자가 페이지를 클릭하지 않고 페이지를 다시로드하지 않으면 다시 표시되지 않습니다.
  2. 세션에 추가하십시오. 사용자가 상태 링크를 클릭 할 때만 세션에서 삭제됩니다.

직접 TempData/세션에 액세스 할 수 있습니다, 또는 당신이 StatusMsg 속성과 관련된 물건 BaseController을 가질 수 있습니다, 또는 당신이 BaseViewModel (모든 행동 '뷰 모델에 대한 기본 클래스)를 가질 수이 StatusMsg 속성이 포함되어 있습니다.

상태 표시 줄 jQuery와 마찬가지로, Google에서 하나를 선택할 수 있습니다 (예 : http://www.west-wind.com/WebLog/posts/388213.aspx, http://plugins.jquery.com/project/positionFooter). 0에서 절대 위치 : 당신은 MSG 그냥

<script> 
    <% if (Model.StatusMsg != null) %> 
    $(function(){ $("#statusbar").fadeIn(); }); 
    <% } %> 
</script> 
을 얻을 때 0, 폭 100 %, 어쩌면 다음, 불투명도를 설정하면 상단에 위치 할 그러나 경우에, 그것은 CSS/jQuery를 라인의 단지 몇 훨씬 쉽게

여기 OK입니다. 당신은 ID = "MSG"와

#msg { 
    text-align: center; 
    position: absolute; 
    line-height: 2em; 
    left: 0px; 
    top: 0px; 
    width: 100%; 
    display: none; 
    opacity: 0.7; 
    background-color: #aaf; 
    border-bottom: 1px solid black; 
    } 

이 페이지는 http://plugins.jquery.com/project/jQueryFixedPositionPlugin를 사용하여 스크롤되지 않도록 당신은 위에 요소를 해결할 수와 div에있다.

이제 상태 메시지가있을 때마다 Session [ "status"] = "mymessage"를 수행합니다. 또는 BaseController.OnActionExecuted를 재정의하고 거기에 Session에 메시지를 넣습니다 (응용 프로그램 전체에 적용되는 경우).

<script type="text/javascript"> 
    function showstatus(text) { 
    $("#msg").fadeIn().append("<div>" + text + "</div>"); 
    } 
    $(function(){ 
     <% if (Session["status"] != null) { %> 
     var status = '<%= Session["status"] %>'; 
     showstatus(status); 
     <% ; Session.Remove("status"); } %> 
    }); 
</script> 

당신은 기본 OnActionExecuting이 작업을 수행하여 Session.Remove ("상태")을 방지 할 수 있습니다 다음보기에 당신이 할 : 다음

{ 
    if (Session["status"] != null) 
    { 
    ViewData["status"] = Session["status"]; 
    Session.Remove("status"); 
    } 
} 

을하고을 ViewData 대신 세션을 참조 보기에서.

이제는 할 일이 더 많을 수 있습니다. 위의 코드는 테스트되지 않은 채로 나와 있습니다.하지만 5 분 안에이 일을 수행하기에 충분하지 않으면 누군가가 완벽한 테스트를 거친 솔루션을 제공하는 데 시간이 걸립니다.이 경우 비용을 청구하지 않습니다 ;-)

+0

굉장합니다. 나는 누군가가 TempData에 대해 언급 할 것인지를 보면서 조용히하고 있었다. 나는 그것을 좋아하지만 확실하지 않았습니다. 둘째, 나는 jQuery 플러그인에 대해 확신하지 못했습니다. 그래서 positionFooter라고 부릅니까? kewl. 이제 Model.StatusMsg (jQuery positionFooter에 뷰의 Model에 대해 추가되었다고 가정)을 어떻게 할 수 있습니까? 위의 코드는 페이드 인으로 만 알려주지 만 내용을 설정하는 방법은 아닙니다. 그냥 편집 해 주실 수 있나요? –

+0

완벽 이 시즈를하기에 충분한 정보가 나와 있습니다. 굉장해. 고마워! –