各行にAjax.BeginFormを含むテーブルがあります。これは、データをコントローラーに渡すのに適しています。
ただし、フォームがpostであるため、コントローラーでRequest.IsAjaxRequest()を起動しません(それを指摘してくれたHTX9に感謝します!)。本当の問題は、現在のビューで更新するのではなく、部分的なビューを返すことです。
以下に2つのフィールドセットを示します。1つ目は更新したいもので、その下はAjax.BeginFormを使用してコントローラーにデータを送信するものです。
言い換えると、ドロップダウンリストで何かを選択すると、上のテーブルが更新されますが、新しい部分ビューで開きます。
_layoutビューに控えめなajaxjsがあり、代わりにボタン付きの投稿データを使用して、アプリケーションの他の部分で同様のセットアップが機能します。
<fieldset>
<legend>Direktbyten</legend>
<div id="container-grid2">
@Html.Partial("_RatingList2", Model.Models2)
</div>
</fieldset>
<fieldset>
<legend>Omarkerade byten(@ViewBag.DirectCount)</legend>
<div id="RatingList">
<table>
<thead>
<tr>
<td>Se hela</td>
<td>Hyra</td>
<td>Rum</td>
<td>Kvm</td>
<td>Gata</td>
<td>Område</td>
<td>Deras prio</td>
<td>Totaltvärde</td>
<td>Min prio</td>
</tr>
</thead>
<tbody>
@foreach (var item in Model.Models1)
{
using (Ajax.BeginForm("UpdateRatingListRow", new AjaxOptions { UpdateTargetId = "container-grid2" }))
{
@Html.Hidden("RatingListId", item.RatingListId)
<tr>
<td>@Html.ActionLink("Till annons", "ViewAd", "Ad", new { id = item.CustomerId }, null)
</td>
<td>@item.Rent</td>
<td>@item.Rooms</td>
<td>@item.SquareMeters</td>
<td>@item.Street</td>
<td>@item.Area</td>
<td>@item.TheirRating</td>
<td>@item.TotalRating</td>
<td>
@Html.Raw("<div id='" + item.RatingListId + "'>")
<select name="SelectedValue" onchange="this.form.submit();">
<option value="0"@if (item.MyRating == "00")
{
@Html.Raw("selected")
}>Ny</option>
<option value="10" @if (item.MyRating == "10")
{
@Html.Raw("selected")
}>Inget intresse</option>
<option value="50"@if (item.MyRating == "50")
{
@Html.Raw("selected")
}>Svagt intressse</option>
<option value="60"@if (item.MyRating == "60")
{
@Html.Raw("selected")
}>Litet intresse-vill ej ha kontakt</option>
<option value="70"@if (item.MyRating == "70")
{
@Html.Raw("selected")
}>Intresserad-Vill ha kontakt</option>
<option value="80"@if (item.MyRating == "80")
{
@Html.Raw("selected")
}>Varit på visning-Vill gå vidare</option>
<option value="90"@if (item.MyRating == "90")
{
@Html.Raw("selected")
}>Intresserad-Vill ha kontakt</option>
<option value="100"@if (item.MyRating == "100")
{
@Html.Raw("selected")
}>Avvaktar värdar</option>
</select>@item.MyRating
@Html.Raw("</div>")
</td>
</tr>
}
}
</tbody>
</table>
</div>
</fieldset>
コントローラは次のとおりです。
[HttpPost]
public ActionResult UpdateRatingListRow()
{
if (Request.IsAjaxRequest())
{
//Do stuff, it does not hit this part because of the isAjaxRequest().
return this.PartialView("_RatingList2", myRatingListMarked);
}
return this.PartialView("_RatingList2", null);
}
生成されたHTML: