【问题标题】:How to set the value of a select element's selected property如何设置选择元素的选定属性的值
【发布时间】:2011-08-06 23:50:46
【问题描述】:

我正在使用 webmatrix、razor 语法和 cshtml 文件。

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

我在本地变量中有当前值或其索引,但我似乎无法将此值分配回选择。

if (currentStatus=="Completed"){
    selStatus.options[1].selected=true;
}

RES = 错误:名称“selStatus”在当前上下文中不存在。

我在这里遗漏了一些明显的东西,但似乎无法理解。任何想法表示赞赏。谢谢

【问题讨论】:

    标签: razor webmatrix


    【解决方案1】:

    如果您有一个静态选项列表,例如婚姻状况,您可以像这样(对于我们中的一些人)使其更清晰:

    <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>
    

    这样做的作用是,如果包含从数据库中检索到的值的 razor 变量 marStat 与条件中的字符串匹配,它会将“选定”呈现到 HTML 中。 这有点“粗鲁”的风格,但我相信它的可读性很强。

    【讨论】:

    • 我的代码与此非常相似,但我得到 The tag helper 'option' must not have C# in the element's attribute declaration area. 猜测这是过时的 Razor 语法。
    • 我遇到了与@GrantBirchmeier 相同的问题,所以为了完整起见,我使用 `
    【解决方案2】:

    在布局站点中:

    @{
        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】:

      除了使用 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,您可能会找到其他选项和方法。

      • 我不确定这段代码是否有效,因为我是靠记忆写的

      【讨论】:

      • 'System.Web.Mvc.HtmlHelper' 没有名为 'DropDownList' 的适用方法,但似乎具有该名称的扩展方法。扩展方法不能动态调度。考虑强制转换动态参数或调用扩展方法而不使用扩展方法语法。
      【解决方案4】:

      我也觉得添加这个很好 - 我就是这样做的。您还可以使用控制器将值传递给 ViewBag 并抓取它并在视图中进行比较。见下文: 在视图中,我将值传递给 ViewBag -

      ViewBag.degreeLevel = userInfo.educationlevel;(用户信息只是我的对象)

      然后,我在视图中进行比较,如下所示:

      【讨论】:

        猜你喜欢
        • 2015-09-12
        • 2018-10-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-02
        • 2012-11-30
        • 1970-01-01
        • 2012-12-24
        相关资源
        最近更新 更多