2

所以我的显示模板中有这段代码:

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

我得到一个实际的下拉列表。我试过这段代码:

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

我得到1(第一名),selectedvalue。但我想显示Yes选定的文本。那么如何在显示模板的下拉列表中显示选定的文本而不是选定的值?

根据请求:

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;
        }
    }
}

ViewModelddv基于:

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;
        }
    }
}
4

1 回答 1

4

您无法使用内置的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()
于 2012-09-24T19:09:56.877 回答