0

インデックス、編集、作成、および詳細ビューを備えたケースモデルがあります。私はCasesコントローラーを持っています。ユーザーがケースの編集ビューを表示しているときに、部分的なビューでjQueryダイアログを開くボタンをクリックして、ケースに苦情コードを追加できるようにしたいと思います。部分的なビューは次のとおりです。

@model IEnumerable<cummins_db.Models.ComplaintCode>

@{
    ViewBag.Title = "Case Complaint Codes";
}

<h2>Select a complaint code</h2>

<table>
    <tr>
        <th></th>
        <th>
            Complaint Code Name
        </th>
        <th>
            Complaint Type
        </th>
    </tr>

@try
    {
    foreach (var item in Model)
        {
    <tr>
        <td>
            @Html.ActionLink("Select", "SelectForCase", new { id = item.ComplaintCodeID})
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.ComplaintCodeName)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.ComplaintType)
        </td>
    </tr>
        }
    }
catch
{
}

</table>

ユーザーは、部分ビューリストに表示されているデータを選択し、開いている編集レコードに多対多の関係として追加できます。MTMレコードを追加するために、部分ビューからこのコントローラーメソッドを使用しています。

public void SelectForCase(int id)
        {
        int cid;
        cid = casesid;

        if (ModelState.IsValid)
            {
            CaseComplaint c = new CaseComplaint
            {
                CasesID = cid,
                ComplaintCodeID = id
            };
            db.CaseComplaints.Add(c);
            db.SaveChanges();
            }
        }

問題は、このアクションが発生した後、jQueryモーダルダイアログと編集ビューが閉じることです。jQueryダイアログを閉じて、ユーザーがケースレコードの編集を続行できるようにしたいだけです。

部分ビューは必要な処理を実行していますが、編集ビューを開いたままにしておく必要があります。

これは、[ビューの編集]アクションリンクから呼び出され、ダイアログで部分的なビューを開くjQueryです。

$(document).ready(function () {
    $('.addComplaintLink').button();

    $('#AddComplaintDialog').dialog(
    {
        autoOpen: false,
        width: 400,
        resizable: false,
        modal: true,
        buttons:
        {
            "Cancel": function () {
                $(this).dialog('close');
            }
        }
    });

    $('.addComplaintLink').click(function () {
        linkObj = $(this);
        var dialogDiv = $('#AddComplaintDialog');
        var viewUrl = linkObj.attr('href');
        $.get(viewUrl, function(data) {
            dialogDiv.html(data);
        //open dialog
        dialogDiv.dialog('open');
        });
        return false;
    });
});
4

1 に答える 1

1

私がそれを正しく理解しているなら、あなたAJAXはあなたのパーシャルで使う必要があります。

したがって、使用する代わりに:

@Html.ActionLink("Select", "SelectForCase", new { id = item.ComplaintCodeID})

試す:

@Ajax.ActionLink("linkText", "SelectForCase", new { id = item.ComplaintCodeID},
                   new AjaxOptions() {...})

[続きを読む:http://msdn.microsoft.com/en-us/library/dd493139]

または、ビュー全体をポストバックするのではなく、jQuery.Ajaxを使用してモデルを更新してみてください。

于 2012-06-27T15:27:59.407 に答える