2011-08-06 49 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和文本! –

相关问题