2013-08-28 55 views
0

我在视图中使用常规HTML下拉列表(选择)。 我不想使用Html.DropdownlistFor出于某种原因。 现在我可以在我的控制器类中获取选定的值。 如何将选定的值返回给视图?ASP.NET MVC - 设置静态选择的默认值(下拉列表)

<select name='ddlLocation' id='ddlLocation'> 
    <option value="">All </option> 
    <option selected="selected" value="1">City1</option> 
    <option value="2">City2</option> 
    <optgroup label="Group"> 
    <option value="3">City2</option> 
    <option value="4">City3</option> 
    <option value="5">City4</option> 
    </optgroup> 
</select> 
+0

为什么不使用Html.DropDownListFor ...?然后它自动照顾自己。 –

+0

DropDownListFor不支持OptGroup,我不想写扩展方法,并使其变得复杂.. – pili

+0

http://stackoverflow.com/questions/13402321/set-a-select-by-option-value-with-optgroups - 这种帮助? –

回答

1

好,你走了,你已经通过selected属性来完成它:

<option selected="selected" value="1">City1</option> 

你应该把选定的属性上要预选值。

我想你现在已经意识到你不使用Html.DropDownListFor的助手会自动为你处理。因为现在你必须把@if其他的状态转换成意大利面代码才能达到预期的行为。但我想你已经有了不使用帮手的理由。


UPDATE:

从您的评论似乎是你的理由不使用DropDownList的助手是因为它不支持optgroup。这是真的,一个很好的理由。但是编写一个custom helper是微不足道的,并且真的可以避免使用if/else语句为预先选择默认值的spaxhettifying您的视图。

+0

我不使用DropDownListFor的原因是因为它不支持optgroup。但我正在寻找一个简单的基于HTML的解决方案来设置默认值,而不是意大利面代码。使用get,post,服务器变量,如php ... – pili

+0

您将不得不通过正确的选项设置选定的属性。为了做到这一点,你不可避免地需要在你的观点中写下如果陈述。 –

+0

我相信从服务器端代码返回选择列表中的选定值应该是非常可能的。应该有一个html概念,而不是使用服务器端语言功能。 – pili

1

不是有很多干净的方式去了解这一点,但假设你有某种类型绑定到该页面的模型,你可以尽快放下基于该模型值下降的设定值,作为页面加载:

<script type="text/javascript"> 

(function($) { 
    $(document).ready(function() { 
     var locationToSet = "@Model.LocationToSet"; 
     $('#ddlLocation option[value="' + locationToSet + '"]').prop('selected', true);}); 
})(jQuery);​ 

</script>