编辑时未选择MVC级联下拉菜单 - c#

我正在开发MVC 4 Web应用程序。剃刀视图之一具有两个下拉列表。第一个下拉列表由传递给视图的ViewModel数据填充。根据从第一个下拉列表中选择的ID(级联),使用JQuery和Ajax调用填充第二个下拉列表。

我的工作很好,但是,每当用户希望编辑现有记录时,我都无法选择选定的辅助下拉列表值。

这是我的两个下拉列表的Razor代码

<div class="lbl_a">
    Employer:
</div>
<div class="editor-field sepH_b">
     @Html.DropDownListFor(model => model.Employer, Model.EmployerList, "Select", new { @class = "inpt_a" })
</div>

<div class="editor-label">
    @Html.LabelFor(model => model.DirectorateID, "Directorate/ Service Group")
</div>
<div class="editor-field">
    @Html.DropDownListFor(model => model.DirectorateID, Model.DirectorateList, "Select")
</div>

这是我的JQuery代码

$(document).ready(function () {

//Pre load on page load
onEmployerChange();

//Hide and show DIVS based on selection
$("#Employer").change(onEmployerChange);

function onEmployerChange() {

        var dataPost = { orgID: val };
        $.ajax({
            type: "POST",
            url: '/User/GetDirectorates/',
            data: dataPost,
            dataType: "json",
            error: function () {
                alert("An error occurred." + val);
            },
            success: function (data) {
                var items = "";
                $.each(data, function (i, item) {
                    items += "<option value=\"" + item.Value + "\">" + item.Text + "</option>";
                });

                $("#DirectorateID").html(items);
            }
        });

    }
}

});

当用户从第一个下拉列表中选择一个值时,所选的ID将传递到用户控制器中的GetDirectorates操作。

这是我的GetDirectorates动作,它返回Json数据

public ActionResult GetDirectorates(string orgID)
{
    if (String.IsNullOrWhiteSpace(orgID))
        orgID = "0";

    var Directorates = _ListService.GetListItemsByOrganisationID(Convert.ToInt32(orgID));

        List<SelectListItem> directorateList = new List<SelectListItem>();
        directorateList.Add(new SelectListItem() { Text = "Select", Value = "" });

        foreach (var directorate in Directorates)
        {
            directorateList.Add(new SelectListItem() { Text = directorate.description, Value = directorate.listItemID.ToString(), Selected = false });
        }

        return Json(new SelectList(directorateList, "Value", "Text"));
    }

每当用户希望编辑现有记录时,我都会传递第一个和第二个下拉列表的值。两个下拉列表均按预期填充了适当的数据,但是,从未选择第二个下拉列表的选定值。

这是“编辑”操作的简化版本,用户在尝试编辑现有记录时会调用它,但显示两个下拉列表中选定的值正在传递。

public ActionResult EditNonMember(int id, string feedback, string courseDateID, string courseID)
{
    //code to retrieve data here

    vm.Employer = UserDetails.Employer;
    vm.DirectorateID = UserDetails.DirectorateID;

    return View(vm);
}

有人可以帮助我吗?

谢谢。

参考方案

您需要获取已保存的雇主ID的首长级列表,并设置DirectorateList集合,然后设置DirectorateID(来自保存的记录);

public ActionResult EditNonMember(int id, string feedback, string courseDateID, 
                                                                 string courseID)
{
    //code to retrieve data here
    var userDetails=repositary.GetUserFromSomeId(id);
    vm.Employers=GetEmployers();
    vm.Employer = userDetails.Employer;
    vm.DirectorateList=GetDirectorateListForEmployer(userDetails.Employer);
    vm.DirectorateID = userDetails.DirectorateID;

    return View(vm);
}
private List<SelectListItem> GetEmployers()
{
  // to do : Return all employers here in List<SelectListItem>
}
private List<SelectListItem> GetDirectorateListForEmployer(int employerId)
{
  // to do : Return all Directorates for the selected employer 
}

ddl在服务器中未更新-asp.net - javascript

我在ASP.NET c#上工作。我有一个DropDownList。 (runat =“ server”)在$ {document).ready上,我更新了它的值:$(document).ready(function () { document.getElementById("ddl").value = "abc"; ……

ASP.NET MVC 5自定义登录,无需脚手架,数据库优先 - c#

我对asp.net和mvc还是很陌生,所以我正在努力学习尽可能多的知识...为此,我从头开始编写博客网站,但是我对身份验证和授权有些困惑。由于我倾向于不真正使用任何脚手架的东西,所以我首先要使用数据库,所以不希望asp.net身份为我创建表。我对散列和加盐密码很酷,并对照数据库检查用户,我遇到的麻烦是将用户设置为登录状态并检查他们应该能够访问什么。我真的很想…

ASP.NET-如何更改JSON序列化的方式? - javascript

我正在使用ASP.NET通过以下查询返回Json文件:public ActionResult getTransactionTotals(int itemID) { DBEntities db = new DBEntities(); var query = from trans in db.Transactions // Linq query removed …

ASP.NET MVC中应为DataTable返回哪种数据? - javascript

我想为DataTable中的每个页面创建动态加载信息。我正在尝试遵循以下示例:https://www.datatables.net/manual/server-sidehttps://www.datatables.net/manual/data来自示例的代码:$('#example').DataTable( { serverSide: t…

Asp.Net:在服务器端还原DropDownList的客户端SelectedItem - c#

因此,我的页面上有一个dropDownList,其中包含数百个项目。用户可以通过在文本框中键入一些文本来过滤此DDL。然后对DDL进行相应的过滤(所有不包含输入文本的项目都将通过JavaScript删除)。然后,用户选择他的项目并按下按钮。通常,这将导致错误,因为DDL已更改并且ASP验证了PostBack数据。但是,使用EnableEventValidat…