2010-11-22 20 views
1

私はタブ付きのフォームを持っています。各タブの下位には部分的なビューがあります。 ユーザーが変更を保存するためにサブミットすると、その部分ビューのメソッドを呼び出すため、部分ビューの場合は(Html.BeginForm(...)%>を使用して<%に入れます。 。代わりに、コンテナビューに関連付けられたメソッドを呼び出しますなぜこれがある、そしてどのように私はこの作業を取得ん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> 
    <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> 
    <%: Html.HiddenFor(x => x.EmployeeId) %> 
      <% } %> 
</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> 
    <% } %> 

とコントローラの外観は、

#region Employee Holiday Request 

public ActionResult HolidayRequest() 
{ 
    return View(new HolidayRequestViewModel(Employee.GetLoggedInUser().EmployeeId)); 
} 

[HttpPost] // This is the method that gets executed 
public ActionResult HolidayRequest(HolidayRequestViewModel hrvm) 
{ 
    if (ModelState.IsValid) 
    { 
     hrvm.Update(); 
     return View(new HolidayRequestViewModel(hrvm.EmployeeId)); 
    } 
    return View(hrvm); 
} 

[HttpPost] // This is the method I want to get executed. 
public ActionResult GetSingleDateTab(HolidayRequestViewModel hrvm) 
{ 
    if (ModelState.IsValid) 
    { 
     hrvm.Update(); 
     return View(new HolidayRequestViewModel(hrvm.EmployeeId)); 
    } 
    return View("GetSingleDateTab", hrvm); 
} 

#endregion 

答えて

3

htmlでnesterフォームを使用することはできません。

+0

あなたは正しいです。私は各タブの新しいものが置かれる前にフォームを終了しなければならない。 – arame3333

+0

私はこの答えを見て、文字通り言った。大丈夫です –

2

私は信じられないほどの解決策を発見しました。 <の>というタグの上に<の形式のタグを挿入するだけです。

<script type="text/javascript"> 
    // don't remove <script> tag 
</script> 

<form .... 
+0

私はこれがうまくいきました。しかし、私はブートストラップモーダルdivが私のBeginForm()ブロックの中にあったので、私は入れ子になったフォームを発見しました。私がブロックの外にそれらを移動した後、私はスクリプトrefを必要としませんでした。私が注意する唯一のことは、これが何らかの奇妙な理由のために働くが、道路を破壊する可能性があることである。 – steveareeno

関連する問題