我正在尝试在剃须刀视图的下拉菜单中设置所选值。
<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>
以上代码无法使用,如果我正在朝着正确的方向努力,或者有其他/更好的方法来实现它,请告诉我。
答案 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>