2012-09-24 64 views
1

所以我有這樣的一段代碼在我displaytemplate:如何在顯示模板中顯示下拉列表的選定文本而非選定值?

@Html.DropDownListFor(blah => blah.InputtedData, ddv) 

,我得到一個實際的下拉列表。我試過這段代碼:

@Html.DisplayFor(blah => blah.InputtedData, ddv) 

我也得到1(一把手)時,的SelectedValue。但是我想顯示Yes,這是selectedtext。那麼如何在顯示模板的下拉列表中顯示選定的文本,而不是選定的值?

每請求:

namespace TESTMVC.ViewModels 
{ 
    public class CtrlInputDataModel 
    { 
     public CtrlTypeModel RowCtrl { get; set; } 
     public long InputtedDataID { get; set; } 
     public string InputtedData { get; set; } 
     public DateTime InputtedDate { get; set; } 

     public CtrlInputDataModel() 
     { 

     } 

     public CtrlInputDataModel (CtrlTypeModel newRowCtrl, long newInputtedDataID, string newInputtedData, DateTime newInputtedDate) 
     { 
      RowCtrl = newRowCtrl; 
      InputtedDataID = newInputtedDataID; 
      InputtedData = newInputtedData; 
      InputtedDate = newInputtedDate; 
     } 
    } 
} 

視圖模型是ddv是基於:

namespace TESTMVC.ViewModels 
{ 
    public class DefaultValueModel 
    { 
     public string Label { get; set; } 
     public string Value { get; set; } 

     public DefaultValueModel() 
     { 

     } 

     public DefaultValueModel(string newLabel, string newValue) 
     { 
      Label = newLabel; 
      Value = newValue; 
     } 
    } 
} 
+0

我想這裏需要更多的信息。你可以發佈你的模型/控制器代碼 –

+0

@EdCharbeneau:提供信息。 – dotnetN00b

+0

@StriplingWarrior:它很長。 – dotnetN00b

回答

3

你不能用內置的Html.DisplayFor做到這一點。不過,您可以創建自定義的展示模板,例如/Views/Shared/DisplayTemplates/DropdownListTest.cshtml,可以手動選擇基於你的財產從下拉列表值的文字:

@model string 
@((IEnumerable<SelectListItem>)ViewData["ddv"]) 
    .Where(s => Model == s.Value) 
    .Select(s => s.Text).SingleOrDefault() 

然後你可以用下面的(有點複雜)的語法使用它:

@Html.DisplayFor(blah => blah.InputtedData, 
    "DropdownListTest", //template name 
    new { ddv = ddv } // aditional view data: the property name needs to be ddv 
}) 

但是,如果不計劃重用此功能只是內聯您的邏輯和使用此代替Html.DisplayFor

@ddv.Where(s => s.Value == Model.InputtedData) 
    .Select(s => s.Text).SingleOrDefault() 
相關問題