2014-12-04 91 views
0

今天我在ASP.NET的SelectList中遇到了默認值的問題。SelectList默認值不起作用

這裏是我想很多的事情後,我怎麼在網上查到:

@{ 
    IEnumerable<SelectListItem> secteurSelectList = from x in Model.secteurList select new SelectListItem { 
             Selected = (x.Id == this.GetSessionSecteurId()), 
             Text = x.Secteur, 
             Value = x.Id.ToString() 
            }; 
    SelectList selectList = new SelectList(secteurSelectList, "Value", "Text", secteurSelectList.Where(x => x.Selected==true).FirstOrDefault().Value); } 
    @Html.DropDownListFor(m => m.secteur, selectList) 

這裏是我的實體的描述: 在視圖模型我用

public List<AuditSecteur> secteurList { get; set; } 

這裏AuditSecteur的對象:

public class AuditSecteur 
{ 
    public int Id { get; set; } 
    public string Secteur { get; set; } 
} 

這就是結果:

<select data-val="true" data-val-number="The field Secteur de l'audit must be a number." data-val-required="The Secteur de l'audit field is required." id="secteur" name="secteur"> 
    <option value="1">option1</option> 
    <option value="2">option2</option> 
    <option value="3">option3</option> 
</select> 

SecteurSelectedList具有真正的一個項目選定: one item selected SelectedList太: one item seledted too

感謝幫助我

+0

檢查此:http://stackoverflow.com/questions/26777478/selectlist-selected-default-value – 2014-12-04 13:46:29

+0

@EhsanSajjad感謝您的迴應,但我不想添加一個元素,但只是預先選擇(dynamycally )該用戶的項目(爲了避免用戶將總是(90%的時間)選擇相同的)。謝謝 – clement 2014-12-04 14:04:53

回答

1

使用強類型的輔助的整個目的是綁定模型屬性,以便在

@Html.DropDownListFor(m => m.secteur, selectList) 

的情況下,如果secteur值不匹配的一個值的選項,那麼它不會被選中(實際上是因爲它無法找到匹配,因此需要選擇第一個選項)。

但是,您的代碼還有許多其他問題。首先你創建IEnumerable<SelectListItem>(設置Selected屬性是沒有意義的,因爲它的助手忽略了它),然後根據下一行中的第一個創建另一個IEnumerable<SelectListItem>SelectList)(點是什麼?)。生成的選項值基於屬性AuditSecteur,但隨後綁定到Secteur屬性,因此它永遠不會回發正確的值。它不是一個真正清楚如何你使用這個(您還沒有你的模型,控制器或視圖),但正確的做法是像

視圖模型

public class SecteurVM 
{ 
    [Display(Name = "Secteur")] 
    [Required] 
    public int? SelectedSecteur { get; set; } 
    public SelectList SecteurList { get; set; } 
} 

控制器

public ActionResult Create() 
{ 
    List<AuditSecteur> secteurList = // get AuditSecteur items from the database 
    SecteurVM model = new SecteurVM(); 
    model.SecteurList = new SelectList(secteurList, "ID", "Secteur"); 
    model.SelectedSecteur = // set the default value you want selected here 
    return View(model) 
} 

[HttpPost] 
public ActionResult Create(SecteurVM model) 
{ 
    // model.SelectedSecteur contains the ID of the selected item 
} 

查看

@model SecteurVM 
.... 
@Html.LabelFor(m => m.SelectedSecteur) 
@Html.DropDownListFor(m => m.SelectedSecteur, Model.SecteurList, "--Please select--") 
@Html.ValidationMessageFor(m => m.SelectedSecteur) 

如果SelectedSecteur的值與列表中項目的ID屬性,則顯示視圖時將選擇該選項。

+0

是的,我做了這些錯誤,因爲我已經嘗試了很多互聯網的例子,我試過所有的事實認爲這表明了事實上的缺陷:-)你的方法是最好的,我想在視圖中計算selectedIteml,但是在ViewModel畢竟是更好的..謝謝! – clement 2014-12-05 09:26:41

0

要綁定下拉列表,而價值模型的secteur財產下拉菜單的難度爲Id,因此下拉菜單在進行預選時不會找到相應的值。

這裏即使你已經定義了pre-selected項目它會reset而渲染,所以我建議綁定你下拉到Id而不是secteur

@Html.DropDownListFor(m => m.Id, selectList)