c# - 部分 View 未正确呈现

标签 c# ajax asp.net-mvc-3 razor

当我们选择第一个我们需要更新第二个时,我有两个下拉菜单。
以下是我的看法:

@model HostingManager.Models.ContractManager
@{
    ViewBag.Title = "CustomCreate"; 
}
@Html.Partial("_GroupDDL" , Model)
@Html.Partial("SelectClient", Model)
@Html.Partial("SelectContract", Model)

下面是第一个下拉列表(局部 View :_GroupDDL)

@model HostingManager.Models.ContractManager

@using (Ajax.BeginForm("SelectClient", "Contracts", new AjaxOptions { UpdateTargetId = "IClients" }))
{ 
    @Html.DropDownListFor(
        m => m.SelectedGroupId,
        new SelectList(Model.IGroups, "id", "name"),
        string.Empty
    )
}
<script type="text/javascript">
    $('#SelectedGroupId').change(function () {
        $(this).parents('form').submit();
    });
</script> 

下面是第二个下拉列表(部分 View :SelectClient)

@model HostingManager.Models.ContractManager

@if (Model.IClients != null && Model.IClients.Count() > 0)
{
    using (Ajax.BeginForm("SelectContracts", "Contracts", new AjaxOptions { UpdateTargetId = "IContracts" }))
    { 
        @Html.HiddenFor(m => m.SelectedGroupId)
        @Html.DropDownListFor(
            m => m.SelectedClientId,
            new SelectList(Model.IClients, "id", "cname"),
            string.Empty
        )
    }
}

<script type="text/javascript">
    $('#SelectedClientId').change(function () {
        $(this).parents('form').submit();
    });
</script>

下面是我的 Controller Action :

public ActionResult CustomCreate()
{
    ContractManager CM = new ContractManager();
    CM.IGroups = db.groups.ToList();
    return View(CM);
}

[HttpPost]
public ActionResult SelectClient(int? SelectedGroupId)
{
    ContractManager CM = new ContractManager();
    CM.IClients = new List();
    if (SelectedGroupId.HasValue)
    {
        CM.IClients = db.client.ToList();
    }
    return PartialView("SelectClient", CM);
}

现在的问题:

当我选择第一个 DDL 时处于 Debug模式。控件正在使用值进入第二个 DDL,但第二个 DDL 未出现在 View 中。即我们在 UI 上看不到第二个 DDL。

我已经在我的布局中添加了 ajax 脚本,并且还在 web.config 中启用了。 如果我能克服这个问题,我会过滤一次第二个 DDL。

最佳答案

除了完善示例之外,您还可以使用 jQuery.post 在 _GroupDDL 局部 View 中执行类似的操作:

<script type="text/javascript">
    $('#SelectedGroupId').change(function () {
        $.post('@Url.Action("SelectClient", "Contracts")', {SelectedGroupId: $(this).val()}, function(data) {
           $('#SelectedClientId').html(data);
        });
    });
</script> 

每次更改 SelectedGroupId ddl 时,它都会调用 Controller 的 SelectClient 操作,它会返回 SelectedClientId 的 html,其中包含基于父/主 ddl 选择的所有选项。

关于c# - 部分 View 未正确呈现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15862074/

相关文章:

c# - asp c# 创建动态pdf文件

asp.net-mvc - 如何将值从一个 Action 传递给具有相同 Controller 的另一个 Action

javascript - 使用ajax从数组输出中获取一个值

javascript - 从 jQuery AJAX 动态创建 Bootstrap 下拉列表不起作用

asp.net - MVC 3 htmlhelper扩展方法来环绕内容

asp.net-mvc - MVC 3 WebGrid Column 按字母顺序排序,而不是根据表结构

c# - Json 与 .NET 和 C#?

c# - 迁移中未应用的最大长度

c# - 如何对分组列表的列表进行分组?

javascript - Ajax 将对象传递给 dancer 模块