2017-10-21 39 views
0

我有兩個模型叫做頻道和節目..在顯示頻道的下拉菜單中,我想要的是當我選擇任何頻道時,視圖將顯示特定頻道的節目。問題是,當我選擇任何通道時,它將通道的值返回給控制器,並應用過濾邏輯並將數據傳遞給新的視圖。雖然視圖在瀏覽器上正確執行所有值,但它不可見。任何幫助將不勝感激。在mvc中有一些問題的下拉列表

查看代碼

@model SitefinityWebApp.Mvc.Models.Channel 
@Html.DropDownListFor(m => m.Title, Model.Items, "Select Channel-", new { @id = "ddl" }) 
<div id="myddl">   
</div>  
<script>  
$('#ddl').change(function() { 
    var selectedValue = $('#ddl').val(); 
    $.post('@Url.Action("GetProgramByChannel", "Channels")', { selection : selectedValue }, function (data) { 
    }); 
}); 
</script> 

GetProgramByChannel方法以所選擇的值

public ActionResult GetProgramByChannel(string selection) 
{ 
    var model = new ProgramsModel(); 
    return View("ProgramsByChannel", model.GetChildItemsOfChannel(selection)); 
} 

ProgramsByChannelView

@model SitefinityWebApp.Mvc.Models.Channel 
<div id="ddl"> 
    @foreach (var item in Model.Programs) 
    { 
     @Html.DisplayFor(m => item.Title) <br /> 
     @Html.DisplayFor(m => item.ShortDescription) <br /> 
     @Html.DisplayFor(m => item.LongDescription) <br /> 
    } 
</div> 

回答

0

因爲用您當前的代碼,當用戶在下拉列表中進行選擇時,您正在進行ajax調用,並且結果(帶有通道的新視圖結果將作爲此ajax調用的響應)未在任何地方使用。

而不是做ajax調用,你可以對action方法做一個新的GET請求,它將返回視圖。

$('#ddl').change(function() { 
    var v = $(this).val(); 
    var url ='@Url.Action("GetProgramByChannel", "Channels")?selection='+v; 
    window.location.href=url; 
}); 

如果你不想發出新的GET請求,但要顯示在同一視圖的結果,那麼你所要做的就是更新的結果來從AJAX調用回DOM。

$('#ddl').change(function() { 
    var v = $(this).val(); 
    var url ='@Url.Action("GetProgramByChannel", "Channels")'; 

    $.post(url, { selection : v} ,function(result){ 
     $("#myddl").html(result); //update the myddl div 
    }); 

}); 

現在,你必須確保你的操作方法返回一個視圖沒有佈局,你正在尋找的部分頁面結果。您可以使用PartialView方法來執行此操作。

public ActionResult GetProgramByChannel(string selection) 
{ 
    var model = new ProgramsModel(); 
    return PartialView("ProgramsByChannel", model.GetChildItemsOfChannel(selection)); 
} 

此外,我看到您將覆蓋下拉的Id值爲ddl。爲什麼要這麼做 ? Title是SELECT元素的Id值有什麼問題?如果你不覆蓋,助手將生成標題的SELECT元素作爲值Idname屬性

+0

對不起,覆蓋只是錯誤..也可以請你解釋如何更新DOM? –

+0

這是答案的第二部分。一個使用'$ .post' – Shyju

+0

我已經根據你的答案更新了腳本標記..並作了局部視圖..在myddl div中呈現它..但沒有變化 –