2011-04-16 34 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