我有两个部分的观点。 顶部我输入字段并提交以保存它们。 在第二部分中,我有一个自动完成文本框。我在自动填充中选择了一个项目,当我单击提交时,我想将该项目添加到数据表中。 因此,对于第一部分,当我单击提交时,我通过控制器上的HttpPost方法保存详细信息。 对于第二部分,我打算通过对控制器的Ajax调用来保存它,然后带回一个带有结果的局部视图。我还没有编写局部视图,接下来就是。 现在我是Ajax.BeginForm的新手,我正在努力解决它。 我希望Ajax.BeginForm中的提交按钮只适用于表单的那一部分。 但实际上它为整个表单调用了HttpPost方法。 那么我该如何解决这个问题呢? 我的观点看起来像;
@using ITOF.HtmlHelpers
@model ITOF.Models.OngoingContractViewModel
@{
ViewBag.Title = "EditOngoingContractDetails";
Layout = "~/Views/Shared/_Layout.cshtml";
}
@using (Html.BeginForm("EditOngoingContractDetails", "Contract", FormMethod.Post,
new { enctype = "multipart/form-data" }))
{
@Html.ValidationSummary(true)
@Html.HiddenFor(model => model.Contract.ContractId)
<h1>Edit Ongoing Contract Details</h1>
<fieldset>
<legend>@Model.Contract.Heading</legend>
<p>Where you see <span class="error">*</span> you must enter data.</p>
<table>
<tr>
<td style="text-align: right">
@Html.LabelFor(model => model.Contract.EndDate)
</td>
<td>
@Html.EditorFor(model => model.Contract.EndDate)
</td>
</tr>
<tr>
<td style="text-align: right">
@Html.LabelFor(model => model.Contract.Organogramme)
</td>
<td>
<input type="file" id="PDF" name="file" />
@Html.HiddenFor(model => model.Contract.Organogramme)
</td>
</tr>
@if (!string.IsNullOrWhiteSpace(Model.Contract.Organogramme))
{
<tr>
<td></td>
<td>
The current organogramme is <span class="HighlightTextRed">@Model.GetOrganogrammeName()</span>
for the contract <span class="HighlightTextRed">@Model.Contract.ContractName</span><br/>
<a href="@Model.Contract.Organogramme" target="_blank">Click here to see the last saved organogramme</a>
</td>
</tr>
}
<tr>
<td style="text-align: right">
@Html.LabelFor(model => model.Contract.AssistantRLOManagerId)
</td>
<td>
@Html.DropDownListFor(model => model.Contract.AssistantRLOManagerId, Model.AssistantRloManagerSelectList, "--N/A--")
</td>
</tr>
@if (this.TempData["SuccessMessage"] != null)
{
<tr>
<td colspan="2" class="success">@this.TempData["SuccessMessage"].ToString()</td>
</tr>
}
<tr>
<td colspan="2" style="padding-top: 20px; text-align: center;"><input type="submit" value="Save" /></td>
</tr>
</table>
</fieldset>
<fieldset>
<legend>Add an existing Site to this contract: </legend>
@using (Ajax.BeginForm("AddExistingSite", new AjaxOptions { UpdateTargetId = "siteRows" }))
{
<input type="text" name="q" style="width: 800px"
data-autocomplete="@Url.Action("SiteSearch", "DataService", new { contractId = @Model.Contract.ContractId })" />
<input type="submit" value="Add site to contract" />
}
@if (Model.SiteList.Count > 0)
{
<table id="siteDataTable" class="display">
<thead>
<tr>
<th>Main Site?</th>
<th>Type</th>
<th>Address</th>
<th>Map</th>
<th>Telephone</th>
<th>Email</th>
</tr>
</thead>
<tbody id="siteRows">
@foreach (var item in Model.SiteList)
{
<tr id="@item.SiteContract.SiteContractId">
<td>@item.SiteContract.MainSiteFlag</td>
<td>@item.Site.SiteType</td>
<td>@item.Site.Address</td>
<td>@item.Site.MapUrl</td>
<td>@item.Site.Telephone</td>
<td>@item.Site.Email</td>
</tr>
}
</tbody>
</table>
<div class="add_delete_toolbar" />
}
@Html.ListLink("Back to List")
</fieldset>
}
答案 0 :(得分:1)
哦不,你不能嵌套HTML表格。这不受支持。你必须重新考虑你的设计。这与ASP.NET MVC以及Html.BeginForm
或Ajax.BeginForm
之类的内容完全无关。 HTML规范只是告诉您<form>
标记不能嵌套,如果嵌套它,您将得到不同浏览器之间不同的行为。
例如,您可以使用jquery UI autocomplete plugin实现自动填充功能,并删除Ajax.BeginForm
。