0

各行に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: ここに画像の説明を入力してください

4

1 に答える 1

1

これが私の「フルハック」(スウェーデン語での醜いハック)です。各行IDにボタンを追加し、それを呼び出して送信します。多くのコードを書き直すことなく、クリーンなソリューションを望んでいます。

using (Ajax.BeginForm("UpdateRatingListRow", new AjaxOptions { UpdateTargetId = "container-grid2", OnSuccess = "OnSuccess('" + item.RatingListId + "')" }))
{ 
   <input type="submit" id="@item.RatingListId" style="position: absolute; top: -1000px">
   @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="document.getElementById(@item.RatingListId).click();">
          <option value="0"@if (item.MyRating == "00")
于 2013-01-14T19:37:12.437 に答える