2011-08-06 47 views
0

因此,在我看來,我在for循環中動態創建下拉列表。我在唯一的id值中使用相同的名稱值。將HTML.DropDownList值數組發送到控制器操作方法

@foreach(var item in Model.Items) 
{ 
    @Html.DropDownList("Items" Model.GenerateSelectList(item.id), new { id = item.id }) 
} 

在該文章中,我能得到這樣的下拉菜單的值我控制器操作方法:

[HttpPost] 
[ValidateAntiForgeryToken] 
[Authorize] 
public ActionResult ClassicLineup(IList<int> items) 
{ 
} 

我無法弄清楚如何獲得BOTH下拉的id和關聯的值。

看來似乎應該是簡單,但它已經難倒了我...

感謝。

+0

你有興趣只獲取選定的項目? –

+0

正確我只關心獲取選定的值和相應的下拉列表編號 –

回答

0

我剛剛結束了通過形式收集循環和解析下拉ID( form.key)和下拉值(form.key.value)。

顯然,沒有簡單的方法讓MVC將下拉值和id綁定到控制器操作參數中的集合。

2

表單提交瀏覽器只發送下拉列表中的選定值,所以沒有機制讀取所選項目的文本,但可以爲您創建一個。

在下面的代碼中,我創建了一個隱藏的輸入,它存儲當前選定項目的文本,並在表單上發送到服務器。

您可以在控制器或視圖中創建以下列表(控制器中的首選位置);

var items= (from item in Model.Items 
       select new SelectListItem 
       { 
        Value= item.DisplayProperty 
        Text= item.Value 
       }).toList(); 


<form action="controller/test"> 

@*This will create DD*@ 
@Html.DropDownList("MyDropDownList", items) 

@*Hidden input*@ 
<input type="hidden" id="ddSelectedName" name="ddSelectedName" /> 

<br> 
    <input type="submit" value="submit"/> 
    </form> 

包括jQuery的在我們的代碼,然後添加此

<script type="text/javascript"> 
    $('#MyDropDownList').change(function() { 
     $('#ddSelectedName').val($(this).find(':selected').text()); 
    }); 
</script> 

控制器

public string test(string MyDropDownList, string ddSelectedName) 
{ 
    return MyDropDownList+ "--"+ddSelectedName ; 
} 
+0

我不想獲取下拉的文本值。只是選定的下拉值,並有關聯的HTML選擇ID值。 使參數IList 爲參數操作方法獲取所有值,但我沒有與下拉相關的id。 –

+0

我提到的測試控制器可以讓您獲得選定值的ID和文本! –

相關問題