2009-10-21 94 views
1

加載dropdownlists我有一個看起來有點類似這個ASP.NET MVC - 基於選擇的值

<% using (Html.BeginForm()) {%> 
    <%= Html.DropDownList("Category") %> 
    <%= Html.DropDownList("SubCategory") %> 
    <input type="submit" value="Print" /> 
    <%= Html.ActionLink("Cancel", "Index") %> 
<% } %> 

如果有人知道我怎麼可以加載基於所選類別的子類別我想知道一個看法? 在webforms我只是使用autopostback事件來做到這一點,但我有點困惑如何使用mvc框架來做到這一點。

在此先感謝

回答

2

改變你的看法是這樣的:

<% using (Html.BeginForm()) {%> 
    <%= Html.DropDownList("Category", Model.SelectList, new {onchange = "actualize(this);"}) %> 
    <div id="selectdiv"> 
    <% Html.RenderPartial("SubCategories"); %> 
    </div> 
    <input type="submit" value="Print" /> 
    <%= Html.ActionLink("Cancel", "Index") %> 
<% } %> 

<script type="text/javascript"> 

function actualize(obj) 
{ 
    $.ajax({ 
     url: url, 
     async: true, 
     type: 'POST', 
     data: { id: obj.value }, 
     dataType: 'text', 
     success: function(data) { $("#selectdiv").html(data); }, 
     error: function() { 
      console.log('Erreur'); 
     } 
    }); 
} 

</script> 

創建一個名爲SubCategories.aspx控制,包括在它:

<%= Html.DropDownList("SubCategory",Model.SelectList) %> 

創建一個模型類

public class MyModel 
{ 
    public SelectList SelectList {get;set;} 
} 

創建一個控制器動作

public ActionResult SubCategories(int id) 
{ 
    MyModel model = new MyModel(); 
    model.SelectList = new SelectList(YourRepository.GetSubCategories(id),"Id","Name"); 
    return View(model); 
} 
+0

希望看到部分視圖中的下拉列表,以便它可以重新使用。所以不要有兩個下拉菜單,而只需要一個局部視圖。使造型更容易一些,你只需要做一次。我知道這是有點多餘的一個單一的下拉列表,但在我的經驗,這然後成爲第二性質與更大的可重用組件 – griegs 2009-10-21 03:52:59

+0

如果你讀,第二個下拉是在一個名爲SubCategories.aspx的局部視圖:) – Gregoire 2009-10-21 11:45:48

+0

如果有另一個下降在依賴於類別和子類別的子類別之後,您是否會建議將它放在另一個部分視圖中? – AlteredConcept 2009-11-10 18:59:24

1

放置一個PartialView內的下拉列表。然後,當你回發PartialView(「viewName」,model)。然後在你的jQuery的返回中,用返回的新html代替部分視圖。

所以你是查看;

<div id="myPartialView"> 
    <% Html.PartialView("PartialViewName", model); %> 
</div> 

那麼你的jQuery不會像

$('#myPartialView').html = retHtml; 

你的C#

return PartialView("PartialViewName", model); 

未經測試,但是這就是我想你想採取的方法。