如何设置select元素的selected属性的值

rus*_*der 12 webmatrix razor

我正在使用webmatrix,razor语法和cshtml文件.

我有一个数据库记录的"编辑"页面,其中包含一个选择框(id ="selStatus").我试图根据正在编辑的当前记录的值动态设置选择框的"选定"值.

我在本地var中有当前值或其索引但我似乎无法将此值赋给select.

if (currentStatus=="Completed"){
    selStatus.options[1].selected=true;
}
Run Code Online (Sandbox Code Playgroud)

RES =错误:当前上下文中不存在名称"selStatus".

我错过了一些明显的东西,但似乎无法得到它.任何想法都赞赏.谢谢

Ama*_*ndo 25

如果你有一个静态的选项列表,例如,对于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>
Run Code Online (Sandbox Code Playgroud)

这样做的是,如果包含从数据库中检索的值的剃刀变量marStat与条件中的字符串匹配,则会将"选中"呈现为HTML.这有点"粗野"的风格,但我相信它非常易读.

  • 我遇到了与@GrantBirchmeier相同的问题,所以为了完整起见,我通过使用 `&lt;option selected="@(marStat == "Single") value="marStat"&gt;&lt;/option&gt; 来修复它,其中 marStat 在选择项目作为值 (9认同)
  • 我的代码与此非常相似,但我得到“标签助手‘选项’在元素的属性声明区域中不得包含 C#。”猜测这是过时的 Razor 语法。 (8认同)
  • 如果您在属性中完全“选择”,它就会选择它。“selected:”、“selected=false”都会将其设置为选中状态。 (3认同)

Luc*_*son 8

在.NET 6 中:

\n

使用asp-for="@selectedValue"

\n
@{\n string selectedValue = "en-us"\n}\n<select name="culture" asp-for="@selectedValue">\n  <option value="pt-br">Portugu\xc3\xaas (Brasil)</option>\n  <option value="en-us">English (United States)</option>\n</select>\n
Run Code Online (Sandbox Code Playgroud)\n

在运行时,.NET 将设置选定的属性标记。

\n


dtc*_*dtc 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
    });
}
Run Code Online (Sandbox Code Playgroud)

以上将创建您要添加到下拉列表中的数据,并选择符合条件的项目.您必须修改才能使用您的特定标准和逻辑.

接下来,将其添加到cshtml的HTML部分:

@Html.DropDownList("StatusTypes", statusdropdownlistdata)
Run Code Online (Sandbox Code Playgroud)

上面将使用ID ="StatusTypes"呈现下拉列表,并使用所选项目呈现下拉数据.

查找Html.DropdownList,您可能会找到其他选项和方法来执行此操作.

  • 我不确定这段代码是否有用,因为我是用内存写的


小智 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>
Run Code Online (Sandbox Code Playgroud)

在另一个网站上,你可以用类似的东西访问它

var accountType = Convert.ToInt32(Request["accountType"]);
Run Code Online (Sandbox Code Playgroud)

之后根据您的需求设置它

PageData["accountType"] = (required int value);
Run Code Online (Sandbox Code Playgroud)