C# 如何在MVC3中更新视图而不回发

C# 如何在MVC3中更新视图而不回发,c#,jquery,asp.net-mvc-3,C#,Jquery,Asp.net Mvc 3,如何在MVC3中更新下拉列表。我想用其他视图填充的最新数据重新填充它,但我不想回发视图,而是想用jquery实现它。 我有一个下拉列表,如: @Html.DropDownListFor(m => m.Department, Model.Departments) @Html.ValidationMessageFor(m => m.Departments) <input type="button" value="Refresh" id="btnrefresh" /> 以下是

如何在MVC3中更新下拉列表。我想用其他视图填充的最新数据重新填充它,但我不想回发视图,而是想用jquery实现它。 我有一个下拉列表,如:

@Html.DropDownListFor(m => m.Department, Model.Departments)
@Html.ValidationMessageFor(m => m.Departments)
<input type="button" value="Refresh" id="btnrefresh" />
以下是控制器方法:

public ActionResult RefreshDepartments(EmployeeModel empModel)
    {
        empModel.Departments = GetDepartments();
        empModel.Roles = GetRoles();
        return Json(new { message = "Updated successfully"}, JsonRequestBehavior.AllowGet);
    }
如何在没有任何回发的情况下,单击“刷新”按钮以最新值更新dropdownlist?
将模型传递给控制器并更新模型属性是一个好主意吗?还有什么其他可能的方法

在我看来,你并不需要将模型发布到你的控制器上。此外,是的,您完全可以使用jquery来实现这一点!另一方面,您也可以使用Ajax.beginnform()helper方法来实现这一点,但是让我们来处理您的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));
    });
});

这是返回模型的替代方法。它允许您操作原始JSON。希望有帮助

你几乎都做到了!你为什么不通过行动发送数据,我是说列表?您发送了一条要查看的消息,因此您可以以类似方式发送列表,而无需提醒结果,您可以填写dropdownlist。大概是这样的:

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);
        );
    });
});
公共行动结果刷新部门(员工模型empModel)
{
返回Json(新的{departments=GetDepartments()},JsonRequestBehavior.AllowGet);
}
$.getJSON(参考,数据,函数(结果){
$(“#部门”).html(“”);
对于(变量i=0;i
public JsonResult RefreshDepartments()
{
    return Json(GetDepartments, JsonRequestBehavior.AllowGet);
}

private SelectList GetDepartments
{
    var deparments = GetDepartments;
    SelectList list = new SelectList(departments);
    return list;
}
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);
        );
    });
});