【问题标题】:MVC: Form not rendering in partial viewMVC:表单未在部分视图中呈现
【发布时间】:2010-11-22 09:13:13
【问题描述】:

我有一个带有标签的表单。从属于每个选项卡的是局部视图。 当用户提交以保存更改时,我想为该局部视图调用一个方法,因此对于我放入 的局部视图。但这会被忽略并单击提交将而是调用与容器视图关联的方法。为什么会这样,如何让它工作?

视图看起来像;

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

【问题讨论】:

    标签: asp.net-mvc


    【解决方案1】:

    您不能在 html 中使用嵌套表单。

    【讨论】:

    • 你是对的。我必须在每个选项卡的新表单放入之前结束表单。
    • 我看到了这个答案并字面上说。哦,这就是为什么。
    【解决方案2】:

    我发现了一个令人难以置信的解决方案。只需在

    标签上方插入一个

    【讨论】:

    • 我发现这很有效;但是,我发现我有嵌套表单,因为我的引导模式 div 在我的 BeginForm() 块内。一旦我将它们移到块外,我就不需要脚本参考。我要提醒的唯一一件事是,尽管这出于任何古怪的原因,但它可能会破坏道路。
    猜你喜欢
    • 2013-06-17
    • 1970-01-01
    • 1970-01-01
    • 2018-12-11
    • 1970-01-01
    • 2015-05-22
    相关资源
    最近更新 更多