2010-11-22 3 views
2

탭이있는 뷰가 있습니다. 각 탭마다 부분보기가 있습니다. 탭을 선택하여 변경 사항을 게시하고 부분 뷰를 반환하면 부분 뷰가 전체 뷰가 아닌 렌더링 된 유일한 것입니다. 이 문제를 해결하기 위해 양식을 납치해야한다고 생각합니다. 나는 이것을하는 방법을 궁금해.MVC; 포스트 백 이후에 올바른 활성 탭을 렌더링하는 방법

내보기;

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Employee.Master" Inherits="System.Web.Mvc.ViewPage<SHP.WebUI.Models.HolidayRequestViewModel>" %> 

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server"> 
    HolidayRequest 
</asp:Content> 

<asp:Content ID="Content2" ContentPlaceHolderID="EmployeeContent" runat="server"> 
    <% using (Html.BeginForm()) {%> 
    <%: Html.AntiForgeryToken() %> 
    <h2>Holiday Request</h2> 
    <p>You have <%: Html.DisplayFor(model => model.DaysAvailableThisYear) %> days left annual leave for this year 
    and <%: Html.DisplayFor(model => model.DaysAvailableNextYear) %> days left for next year.</p> 
    <p>If your request is approved and exceeds the number of days left, then those extra days will not be paid.</p> 
    <%: Html.HiddenFor(x => x.EmployeeId) %><%: Html.HiddenFor(x => x.ApproverId) %> 
      <% } %>  
    <div id="tabs"> 
     <ul> 
      <li><a href="#tabs-1">Approver</a></li> 
      <li><a href="#tabs-2">Single Date</a></li> 
      <li><a href="#tabs-3">Date Range</a></li> 
     </ul> 
     <div id="tabs-1"> 
      <% Html.RenderPartial("GetApproverTab", Model); %> 
     </div> 
     <div id="tabs-2"> 
      <% Html.RenderPartial("GetSingleDateTab", Model); %> 
     </div> 
     <div id="tabs-3"> 
      <% Html.RenderPartial("GetDateRangeTab", Model); %> 
     </div> 
    </div> 

</asp:Content> 

내 부분보기;

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<SHP.WebUI.Models.HolidayRequestViewModel>" %> 

<% using (Html.BeginForm("GetSingleDateTab", "Employee", FormMethod.Post, new { id = "frmSingleDate" })) 
     { %> 
<p>Enter your day or part day of Annual Leave here.</p> 
<table> 
    <tr> 
     <td align="right">Date:</td> 
     <td><%: Html.EditorFor(x => x.SingleDate) %></td> 
    </tr> 
    <tr> 
     <td align="right">Morning Only:</td> 
     <td><%: Html.CheckBoxFor(x => x.MorningOnlyFlag) %></td> 
    </tr> 
    <tr> 
     <td align="right">Afternoon Only:</td> 
     <td><%: Html.CheckBoxFor(x => x.MorningOnlyFlag) %></td> 
    </tr> 
    <tr> 
     <td colspan="2" align="center"><input type="submit" value="Save" /></td> 
    </tr> 
</table> 
<%: Html.HiddenFor(x => x.EmployeeId) %><%: Html.HiddenFor(x => x.ApproverId) %> 
    <% } %> 

내 컨트롤러;

[HttpPost] 공개 ActionResult HolidayRequest (HolidayRequestViewModel hrvm) { 경우 (ModelState.IsValid) { hrvm.Update(); 반환보기 (새 HolidayRequestViewModel (hrvm.EmployeeId)); } 돌아 가기보기 (hrvm); }

당신이 끝 부분에있는 # NAME에 대한 확인 요청/게시 URL을 확인해야하고 해당 URL로 리디렉션 것처럼 보이는
[HttpPost] 
public ActionResult GetSingleDateTab(HolidayRequestViewModel hrvm) 
{ 
    if (ModelState.IsValid) 
    { 
     hrvm.Update(); 
     return PartialView(new HolidayRequestViewModel(hrvm.EmployeeId)); 
    } 
    return PartialView(hrvm); 
} 

답변

2

.

Javascript 및 숨겨진 필드에서 탭을 클릭하여 업데이트하고 서버를 확인하면서 숨겨진 필드와 동일한 작업을 수행 할 수 있습니다.

또한 URL을 정리하고 코드를 간단하게 유지하려면 URL/게시 된 숨김 필드를 기반으로 선택한보기를 설정하도록보기의 출력을 변경할 수 있습니다.

+0

+1 숨겨진 필드. #name은 모든 플랫폼의 모든 브라우저에서 유효하지 않다고 생각합니다. – Rippo

+0

저는 MVC를 처음 접했고 여러분이 제안하는 것이 명확하지가 않습니다. – arame3333

+0

요청한 URL을 확인하여 # 으로 끝나면 사용자가 즐겨 찾기에 갔음을 의미합니다. 그럴 경우 탭의 선택을 고려하여보기의 출력을 수정할 수 있습니다. 아마도 앵커에 추가 클래스를 추가하는 것입니다. 귀하의 자바 스크립트는 다음 그것을 확인하고 적절한 탭을 선택할 수 있습니다. 숨겨진 필드와 똑같은 트릭을 사용하면 URL을 사용하는 대신 그 값을 확인할 수 있습니다. – Kieron

관련 문제