在MVC3中设置所选选项

P.B*_*key 8 razor asp.net-mvc-3

所以我可以做到这一点

string selectedOption = ViewBag.SelectedOption;

<select id="SelectedYear" name="SelectedYear">       
    <option value="2010">2010</option>//if(selectedOption == 2010)...meh...
    <option value="2011">2011</option>             
    <option value="2012">2012</option>
    <option value="2013">2013</option>
</select>
Run Code Online (Sandbox Code Playgroud)

而且我知道我可以存储SelectedOption在a中div并使用jQuery以简洁的方式设置所选的选项$(document).ready.

是否有一种简洁的方法来直接完成MVC3/razor的任务?

Joa*_*oao 15

就像是:

int selectedOption = ViewBag.SelectedOption;

<select id="SelectedYear" name="SelectedYear">       
    <option value="2010" selected="@(selectedOption == 2010 ? "selected" : "")">2010</option>
    <option value="2011" selected="@(selectedOption == 2011 ? "selected" : "")">2011</option>             
    <option value="2012" selected="@(selectedOption == 2012 ? "selected" : "")">2012</option>
    <option value="2013" selected="@(selectedOption == 2013 ? "selected" : "")">2013</option>
</select>
Run Code Online (Sandbox Code Playgroud)

话虽这么说,这是HtmlHelper.DropDownList的用途.

将您的逻辑放在控制器中,然后通过ViewBag传递IEnumerable.此时,您只需在视图中调用帮助程序:

@Html.DropDownList("optionName", ViewBag.MyOptionsList as IEnumerable<SelectListItem>)
Run Code Online (Sandbox Code Playgroud)

  • 条件应该是Selected属性而不是它的值:<option value ="2010"@(selectedOption == 2010?"selected":"")> 2010 </ option> (7认同)
  • `selected ="selected"`是XHTML sintax.从HTML 4.01开始,`selected`可用.最重要的是,它们都有效,因为在HTML上忽略了值部分. (2认同)
  • 接受的答案对我不起作用,但 Amr Elgarhy 的解决方案起作用了。接受的答案最终将 selected="" 放在标记中,这(至少在 IE 中)最终会选择选项框。 (2认同)

Raf*_*nig 13

TagHelper 不允许在其标记区域中使用 C# 代码。

您可以使用!字符将选项元素转换为常规 html 标签。

例如:

<!option @(ViewBag.CurrrentPage == x ? "selected" : "")>@x<!/option>
Run Code Online (Sandbox Code Playgroud)

  • 不知道有关!停用标签区域。非常有用,谢谢! (2认同)

Lar*_*ang 6

int selectedOption = ViewBag.SelectedOption;


<select id="SelectedYear" name="SelectedYear"> 

<option value="2010" @if(selectedOption == 2010){<text>selected="selected"</text>}>2010</option>

...

</select>
Run Code Online (Sandbox Code Playgroud)