4

MVC3 でドロップダウン リストを更新するにはどうすればよいですか。他のビューで埋められた最新のデータを補充したいのですが、ビューをポストバックしたくなく、jquery で実現したいと考えています。次のようなドロップダウンリストがあります。

@Html.DropDownListFor(m => m.Department, Model.Departments)
@Html.ValidationMessageFor(m => m.Departments)
<input type="button" value="Refresh" id="btnrefresh" />

コントローラーのメソッドを呼び出す jquery コードを作成しました。

 $("#btnrefresh").click(function () {
 var ref = '@Url.Action("RefreshDepartments")';
 var model = '@Model.ToJson()';
 var data = { empModel: model };
 $.getJSON(ref, data, function (result) { alert(result.message); });
        return false;
    });

そして、コントローラーメソッドは次のとおりです。

public ActionResult RefreshDepartments(EmployeeModel empModel)
    {
        empModel.Departments = GetDepartments();
        empModel.Roles = GetRoles();
        return Json(new { message = "Updated successfully"}, JsonRequestBehavior.AllowGet);
    }

ポストバックなしで「更新」ボタンをクリックすると、ドロップダウンリストを最新の値で更新するにはどうすればよいですか? モデルをコントローラーに渡して、モデルのプロパティを更新するのは良い考えですか? 他にどのような方法が可能ですか?

4

2 に答える 2

0

あなたがしていることのためにあなたがあなたのコントローラーにモデルを投稿する必要があるように私には見えません。さらに、はい、jqueryで絶対にこれを行うことができます!ちなみに、Ajax.BeginForm()ヘルパーメソッドを使用してそれを行うこともできますが、jqueryの例を扱うことができます。

@ Url.Actionを使用してjqueryを複雑にするのではなく、パス自体を呼び出すだけで済みます。

$("#btnrefresh").click(function () {
    var ref = 'ControllerName/RefreshDepartments';
    $.each(result, function (index, val) {
        $('#whateverYourRenderedDropdownListHtmlObjectis')
            .append($("<option></option>")
            .attr("value", val.Text)
            .text(val.Text));
    });
});

さて、あなたのコントローラーのために...

public JsonResult RefreshDepartments()
{
    return Json(GetDepartments, JsonRequestBehavior.AllowGet);
}

private SelectList GetDepartments
{
    var deparments = GetDepartments;
    SelectList list = new SelectList(departments);
    return list;
}

これは、モデルを返す代わりの方法です。代わりに、生のJSONを操作できます。それが役に立てば幸い!

于 2013-01-25T05:26:10.160 に答える
0

あなたはほとんどそれをしました!RefreshDepartments アクションでデータ、つまりリストを送信してみませんか? 表示するメッセージを送信したので、同様にリストを送信し、結果を警告する代わりに、ドロップダウン リストに入力することができます。このようなもの:

public ActionResult RefreshDepartments(EmployeeModel empModel)
    {
        return Json(new { departments = GetDepartments()}, JsonRequestBehavior.AllowGet);
    }


$.getJSON(ref, data, function (result) { 
    $("#Department").html("");
    for (var i = 0; i < result.departments.length; i++) {
        var item = result.departments[i];
        $("#Department").append(
              $("<option></option>").val(item.Id).html(item.Name);
        );
    });
});
于 2013-01-25T05:33:56.890 に答える