我正在使用webmatrix,razor语法和cshtml文件。
我有一个数据库记录的“编辑”页面,其中包含一个选择框(id =“selStatus”)。我试图根据正在编辑的当前记录的值动态设置选择框的“选定”值。
我在本地var中有当前值或其索引但我似乎无法将此值赋给select。
if (currentStatus=="Completed"){
selStatus.options[1].selected=true;
}
RES =错误:当前上下文中不存在名称“selStatus”。
我遗漏了一些显而易见的东西,但似乎无法得到它。任何想法都赞赏。感谢
答案 0 :(得分:24)
如果你有一个静态的选项列表,例如,对于Marital Status,你可以保持它更清晰(对于我们中的一些人),如下所示:
<select>
<option value="Single" @(marStat == "Single" ? "selected" : "")>Single</option>
<option value="Married" @(marStat == "Married" ? "selected" : "")>Married</option>
<option value="Divorced" @(marStat == "Divorced" ? "selected" : "")>Divorced</option>
<option value="Widowed" @(marStat == "Widowed" ? "selected" : "")>Widowed</option>
</select>
这样做的是,如果包含从数据库中检索到的值的剃刀变量marStat与条件中的字符串匹配,则会将“选中”呈现为HTML。 这有点“粗野”的风格,但我相信它非常易读。
答案 1 :(得分:5)
除了使用Javascript之外,您还可以在创建下拉列表时设置所选项目。
当您拥有动态生成的下拉列表时,这将有效。如果您的下拉列表是静态的,那么您需要使用javascript。
首先创建将填充下拉列表的数据:
var selectQ = "SELECT StatusName, StatusID FROM MyStatusTable";
List<SelectListItem> statusdropdownlistdata = new List<SelectListItem>();
bool isSelected = false;
foreach(var item in db.Query(selectQ)){
isSelected = false;
if(item.StatusName == "Completed"){
isSelected = true;
}
statusdropdownlistdata.Add(new SelectList Item
{
Text = item.StatusName,
Value = item.StatusID.ToString(),
Selected = isSelected
});
}
以上内容将创建您要添加到下拉列表中的数据,并选择符合条件的项目。您必须进行修改才能使用您的特定标准和逻辑。
接下来,将其添加到cshtml的HTML部分:
@Html.DropDownList("StatusTypes", statusdropdownlistdata)
上面将使用ID =“StatusTypes”呈现下拉列表,并使用所选项目呈现下拉数据。
查找Html.DropdownList,您可能会找到其他选项和方法。
答案 2 :(得分:5)
在布局网站中:
@{
if (!IsPost)
{
PageData["accountType"] = 0; /* default value */
}
}
<html>
<head></head>
<body>
<form action="@Href("~/")" method="post">
<select name="accountType">
<option value="0"@(PageData["accountType"] == 0 ? " selected" : "")>Standard</option>
<option value="1"@(PageData["accountType"] == 1 ? " selected" : "")>Golden</option>
<option value="2"@(PageData["accountType"] == 2 ? " selected" : "")>Ultimate</option>
</select>
</form>
</body>
<html>
在另一个网站上,您可以使用类似
的内容访问它var accountType = Convert.ToInt32(Request["accountType"]);
稍后根据您的需要设置
PageData["accountType"] = (required int value);
答案 3 :(得分:0)