2011-04-16 79 views
8

我正在使用webmatrix,razor语法和cshtml文件。如何设置select元素的选定属性的值

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

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

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

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

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

回答

4

除了使用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,你可能会找到其他的选择和方法来做到这一点。

  • 我不知道这是否代码将工作,因为我在布局的网站写它的内存
+0

“System.Web.Mvc.HtmlHelper ”有一个名为没有适用的方法“的DropDownList”但似乎有一个名称的扩展方法。扩展方法不能动态分派。考虑转换动态参数或调用扩展方法而不使用扩展方法语法。 – 2014-09-19 07:52:26

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); 
19

如果你有选择的静态列表,例如,对于婚姻状况,你可以把它更清晰(对于某些人来说)是这样的:

<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中。 这是一种“粗暴”的风格,但我相信它非常可读。

0

感觉很好,加上这一点 - 这是我如何做到的。您也可以使用控制器将值传递给ViewBag,并抓取它并在视图内进行比较。见下文: 在这里,在I的值传递给到ViewBag视图 -

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

于是,我做了比较,在视图中,如下图所示: enter image description here

相关问题