2013-04-07 85 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