2015-01-21 34 views
1

如何選擇哪些屬性顯示在Html.DropDownListFor爲某種類型?如何選擇Html.DropDownListFor上顯示的文本

例如我已經從其中我想選擇值

public partial class Artysta 
    { 
     public Artysci() 
     { 
      this.SpektaklArtysta = new HashSet<SpektaklArtysta>(); 
     } 

    [Key] 
    public int ArtystaID { get; set; } 

    public string Imie { get; set; } 

    public string Nazwisko { get; set; }   
} 

以下類下面是編輯視圖的生成代碼有時顯示IMIE和不時Nazwisko

@using (Html.BeginForm()) 
{ 
@model Teatr.Models.SpektaklArtysta 
<div class="form-group"> 
      @Html.LabelFor(model => model.ArtystaID, "Artysta", htmlAttributes: new { @class = "control-label col-md-2" }) 
      <div class="col-md-10"> 
       @Html.DropDownList("ArtystaID", null, htmlAttributes: new { @class = "form-control" }) 
       @Html.ValidationMessageFor(model => model.ArtystaID, "", new { @class = "text-danger" }) 
      </div> 
     </div> 
} 

我想顯示屬性設置爲Nazwisko,我怎麼能做到這一點?

UPDATE:

下面是生成此查看實際模型。

public partial class SpektaklArtysta 
    { 
     public int SpektaklID { get; set; } 

     public int ArtystaID { get; set; } 

     public int RolaArtystyID { get; set; } 

     [Key] 
     public int SpektaklArtystaID { get; set; } 

     public virtual Artysci Artysci { get; set; } 

     public virtual RolaArtysty RolaArtysty { get; set; } 

     public virtual Spektakle Spektakle { get; set; } 
    } 
+1

你是什麼意思顯示'伊米' - 你所發佈的任何代碼都不會顯示與屬性'伊米'(或'納茲維斯科')相關的任何內容。它不清楚你想要做什麼(無論如何你的'@ Html.DropDownList()'也不行)。 – 2015-01-21 09:45:27

回答

2

好吧,你需要真正的傳遞可能值的列表下拉列表中,比如像這樣:

@Html.DropDownListFor(model => model.ArtystaID, new SelectList(Model.Artysci, "ArtystaID", "Nazwisko", 0)) 

它說:DropDownList的設置模式ArtystaID場,這是由模型Artysci場稀少,其中應該包含ArtystaID字段下的關鍵字項,並在Nazwisko字段下顯示文本(所以,您的Artysta類)。

現在,你的類沒有Artysci領域,所以你必須創建它:

public partial class Artysta 
    { 
     public Artysci() 
     { 
      this.SpektaklArtysta = new HashSet<SpektaklArtysta>(); 
     } 

    [Key] 
    public int ArtystaID { get; set; } 

    public string Imie { get; set; } 

    public string Nazwisko { get; set; }  

    public List<Artysta> Artysci = ArtistRepository.GetAllArtists(); 
} 

或者你也可以直接在DropDownList中傳遞:

@Html.DropDownListFor(model => model.ArtystaID, new SelectList(ArtistRepository.GetAllArtists(), "ArtystaID", "Nazwisko", 0)) 

哦,只是一個個人說明:我知道這可能不是你的選擇,除非你是首席/獨立開發人員,但是請爲你的課程,變量等使用英文名稱,如果將來有其他人將不得不爲你工作代碼,他們可能不會說波蘭語;)

+0

我已經更新了此視圖的模型類的問題。目前的代碼工作正常(顯示所有可能的值),但有時顯示的文本是伊米,有時是納茲維斯科。我會檢查一下你提出的方法。關於波蘭人的名字,我正在做一個醫生需要波蘭名字的大學課程,研究我的齒輪;]我所有的代碼庫都是英文的,但這次我沒有選擇。 – 2015-01-21 10:08:49

+0

簡單而流暢!奇蹟般有效。很遺憾,我無法改變自動生成的代碼顯示哪些值。 – 2015-01-21 10:19:28

+0

由於哪些值會進入下拉菜單?在'new SelectList()'中,你可以對數據源做一個Linq查詢:'Model.Artysci.Where(artysta => artysta.Nazwisko.EndsWith(「ski」)'或者你想要的任何過濾,或者做一些修改,例如:'Model.Artysci.Select(artysta => new Artysta {ArtystaID = artysta.ArtystaID,Imie = artysta.Imie,Nazwisko =「Pan」+ artysta.Nazwisko})' – Gerino 2015-01-21 10:31:50

0

你一個很好的選擇是使用DropDownList如下

@Html.DropDownList("DropDownId", Model.Select(item => new SelectListItem 
{ 
    Value = item.ArtystaID.ToString(), 
    Text = item.Nazwisko.ToString(), 
    Selected = "select" == item.ArtystaID.ToString() ? true : false 
})) 

希望這能回答您的要求!

+0

只有一個項目的下拉列表有什麼意義? – 2015-01-21 09:49:37

+0

我不知道,但如果模型有一個以上的項目,我猜它是相關的。 – 2015-01-21 09:55:42

+0

如果它有多個項目,您的代碼無論如何不會工作。爲什麼你會建議'DropDownListFor',然後發佈'DropDownList'的代碼?你還沒有將下拉列表綁定到模型屬性,所以它不會被綁定! – 2015-01-21 09:58:24

相關問題