我有一个几乎完整的解决方案,但我陷入了最后的障碍!
这是我的DropDownList助手
// DropDown helper
public static MvcHtmlString DropDownInputFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, IEnumerable<SelectListItem> ListValues, string DefaultText, object HTMLAttributes, bool CanEdit)
{
if (CanEdit == true)
{
// return a dropdown
return htmlHelper.DropDownListFor(expression, ListValues, DefaultText, HTMLAttributes);
}
else
{
// just return the text (no editor)
return htmlHelper.DisplayFor(expression);
}
}
正如您所看到的,我将根据用户是否可以编辑来返回帮助程序。在这种情况下,如果他们可以编辑,那么我们返回DropDownList,如果他们无法编辑,我们只返回DisplayFor。
然而,问题在于DisplayFor显示'value'(外键)而不是DropDown的文本。
有关如何显示文字而不是值的任何建议?
答案 0 :(得分:0)
据我所知,如果CanEdit为false,您只需要显示与ListValues中的值相对应的文本。为此你可以尝试类似的东西:
// DropDown helper
public static MvcHtmlString DropDownInputFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, IEnumerable<SelectListItem> ListValues, string DefaultText, object HTMLAttributes, bool CanEdit)
{
if (CanEdit == true)
{
// return a dropdown
return htmlHelper.DropDownListFor(expression, ListValues, DefaultText, HTMLAttributes);
}
else
{
// just return the text (no editor)
//but first make sure you have a valid value in your list and show it
var selected = ListValues.FirstOrDefault(item => item.Selected == true);
if (selected != null)
return htmlHelper.DisplayName(selected.Text);
else
//here you can just put the default selected item if no valid value is found
return htmlHelper.DisplayName(ExpressionHelper.GetExpressionText(expression));//or whatever defaultvalue you want
}
}
问题是文本包含在ListValues中,并且所选项目应与您的表达式值匹配。