2010-11-22 14 views
1

Sekmeler içeren bir formum var. Her sekmeye bağlı kısmi bir görünümdür. Kullanıcı değişiklikleri kaydetmek için gönderdiğinde, kısmi görünüm için bir yöntem aramak istiyorum, bu yüzden kısmi görünüm için (Html.BeginForm (...)%> kullanarak <% koymak. Ama bu göz ardı edilir ve gönderme isteği . Bunun yerine konteyner görüntüsü ile ilişkili yöntemi arayacak Bu neden olduğunu ve nasıl bu işe alabilirimMVC: Biçim kısmi görünümde görüntülenmiyor

Görünüm benziyor;?

<%@ 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> 

kısmi görünümü gibi görünüyor;

<%@ 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> 
    <% } %> 

ve denetleyici şöyle görünür;

#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 

cevap

3

Html biçiminde nester formunuz olamaz.

+0

Haklısınız. Her sekme için yeni olanlardan önceki formu doldurmalıyım. – arame3333

+0

Bu cevabı gördüm ve tam anlamıyla söyledim. Oooooh bu yüzden. –

2

İnanılmaz bir çözüm buluyorum. Sadece < > etiketine <formunun> etiketini ekleyin.

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

<form .... 
+0

Bunun işe yaradığını buldum; bununla birlikte, iç içe geçmiş formlarım olduğunu keşfettim çünkü bootstrap modal div'ler benim BeginForm() bloğumun içindeydi. Onları bloğun dışına taşıdıktan sonra betiğe ihtiyacım yoktu. Dikkat etmem gereken tek şey, bunun ne kadar tuhaf bir nedenden dolayı işe yarıyor olsa da, yolun bozulmasına yol açabilir. – steveareeno

İlgili konular