2013-04-07 164 views
3

当我们选择第一个需要更新第二个时,我有两个下拉菜单。
下面是我的看法:部分视图无法正常渲染

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

下面是第一个下拉(局部图:_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> 

下面是第二个下拉(局部图: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> 

以下是我的控制器操作:

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。控制是通过值来到第二个DDL,但第二个DDL没有出现在视图上。即我们无法在UI上看到第二个DDL。

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

+0

你为什么仅仅为一个DDL使用部分视图和ajax表单提交? – Sharun 2013-04-09 09:11:58

回答

0

除了完美的例子,你可以做这样的事情在_GroupDDL局部视图jQuery.post

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

它会在每次更改SelectedGroupId DDL时间呼叫控制器的SelectClient行动,它将返回SelectedClientId的html,基于父/主ddl选择的所有选项。

+0

嗨ararog,感谢您的快速反应,但它不工作。我只是按照你的建议进行了检查,但它并没有调用Controller的SelectClient。根据我发布的代码它调用控制器的SelectClient,但我的主视图不更新与更新的局部视图。 – Mukarram 2013-04-07 12:46:23

+0

不被调用的原因是Url.Action的第二个参数,我通过了“Controller”正确的是“Contracts”,答案已经更新。 – ararog 2013-04-07 12:57:19

+0

是的,我检查时纠正它,但它不工作:( – Mukarram 2013-04-07 13:03:21