MVC;如何在回发后呈现正确的活动选项卡

时间:2010-11-22 11:23:39

标签: asp.net-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]     public ActionResult HolidayRequest(HolidayRequestViewModel hrvm)     {         if(ModelState.IsValid)         {             hrvm.Update();             return View(new HolidayRequestViewModel(hrvm.EmployeeId));         }         return View(hrvm);     }

[HttpPost]
public ActionResult GetSingleDateTab(HolidayRequestViewModel hrvm)
{
    if (ModelState.IsValid)
    {
        hrvm.Update();
        return PartialView(new HolidayRequestViewModel(hrvm.EmployeeId));
    }
    return PartialView(hrvm);
}

1 个答案:

答案 0 :(得分:2)

看起来您需要检查请求/发布的网址以检查最后的#name,然后重定向到该网址。

您可以使用Javascript和隐藏字段执行相同操作,在选项卡上单击并检查服务器时更新它。

此外,如果您希望保持网址更清晰,代码更简单,您可以更改视图上的输出以根据URL /已发布的隐藏字段设置所选的输出。