私は2つのセクションでビューを持っています。一番上のセクションでは、フィールドを入力して送信し、それらを保存します。2 番目のセクションには、オートコンプリート テキスト ボックスがあります。オートコンプリートでアイテムを選択し、送信をクリックすると、そのアイテムをデータテーブルに追加したいと考えています。したがって、送信をクリックした最初の部分では、コントローラーの HttpPost メソッドを介して詳細を保存します。2 番目の部分では、コントローラーの 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>
}