在Razor视图中设置下拉列表的选定值

时间:2013-08-20 16:51:40

标签: asp.net-mvc razor

我正在尝试在剃须刀视图的下拉菜单中设置所选值。

       <select id="drpStatus" name="status">
               <option value="A">Active</option>
               <option value="S">Suspended</option>
               <option value="T">Terminated</option>
               <option value="D">Deleted</option>
       </select>

//I am trying with the below code, based on the value in Model, I want to set the  particular option as selected 
<option selected=@{if(@Model!=null && @Model.Status=='A'){'selected'}} value="A">Active</option>

以上代码无法使用,如果我正在朝着正确的方向努力,或者有其他/更好的方法来实现它,请告诉我。

4 个答案:

答案 0 :(得分:2)

从你的控制器试试这个

控制器:

var record = db.Records.Find(id);
ViewBag.DropStatus = new SelectList(ListOfStatus, record.Status);

SelectList的第一个参数应该是IEnumerable,它将作为DropDownList的数据源,第二个参数是选定的值,所以只需传递要编辑的记录的status属性。

查看:

@Html.DropDownList("Status", string.Empty)

第一个参数是我们在控制器中分配的ViewBag的名称,它也将作为发布数据时的名称。希望我已经说清楚了。

答案 1 :(得分:1)

以下是一些可能的解决方案之一

@{
    ViewBag.Title = "Index";
    Func<char, MvcHtmlString> function = (c) => Model != null && Model.Status == c 
    ? MvcHtmlString.Create("selected='selected'") 
    : MvcHtmlString.Empty;
}

<h2>Index</h2>

<select id="drpStatus" name="status">
    <option @function('A') value="A">Active</option>
    <option @function('S') value="S">Suspended</option>
    <option @function('T') value="T">Terminated</option>
    <option @function('D') value="D">Deleted</option>
</select> 

最好在ViewModel中使用SelectList

答案 2 :(得分:0)

另一种可能的解决方案是在cshtml中使用Razor的辅助标记:

@helper SetGender(string dropdownvalue)
{
    var selected = string.Format("value=\"{0}\"", dropdownvalue);
    if ((string.IsNullOrEmpty(dropdownvalue) && string.IsNullOrEmpty(User.GetClaim(ClaimTypes.Gender.ToString()))) ||
        (User.GetClaim(ClaimTypes.Gender.ToString()) == dropdownvalue))
    {
        selected = string.Concat("selected='selected' ", selected);
    }

    @Html.Raw(selected);
}

<select name="gender">
    <option @SetGender("") >-not set-</option>
    <option @SetGender("male") >male</option>
    <option @SetGender("female") >female</option>
</select>

答案 3 :(得分:0)

@{
    List<SelectListItem> lstOrderTypes = new List<SelectListItem>();
    lstOrderTypes.Add(new SelectListItem {Value = "1", Text = "plan1" });
    lstOrderTypes.Add(new SelectListItem {Value = "2", Text = "plan2" });
}
@functions {
    public static string GetString(IHtmlContent content)
    {
        var writer = new System.IO.StringWriter();
        content.WriteTo(writer, HtmlEncoder.Default);
        return writer.ToString();
    }
}

@{
    var x = GetString(Html.DisplayFor(model => model.OrderType));
}

<select>
  @foreach (SelectListItem option in lstOrderTypes)
  {
      <option value="@option.Value" selected="@(option.Value == x)">@option.Text</option>
  }
</select>