作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的模型中有一个带有一些元数据的复杂类型;
[ComplexType]
public class ComplexModel
{
[Display("Name Label")]
public string Name { get; set; }
}
public class MainModel
{
// ...
public ComplextModel ComplexModel { get; set; }
}
Html.DisplayFor(model => model.ComplexModel.Name)
Html.Display("ComplexModel.Name")
ModelMetadata.FromStringExpression
.
ModelMetadata.FromStringExpression("ComplexModel.Name", viewData)
返回错误的结果。虽然
ModelMetadata.FromLambdaExpression(expression, viewData)
工作正常。
Html.Display("ComplexModel.Name")
正常工作并在此示例中返回“名称标签”。
最佳答案
您必须创建一个使用新模型或新 ViewData 的新自定义 HtmlHelper 类,因此:
public static class CustomHtmlHelperExtensions
{
public static HtmlHelper CustomHtmlHelper(this HtmlHelper helper, Object model)
{
ViewDataDictionary customViewData = new ViewDataDictionary(helper.ViewData) { Model = model };
ViewDataContainer customViewDataContainer = new ViewDataContainer(customViewData);
ViewContext customViewContext =
new ViewContext(helper.ViewContext.Controller.ControllerContext, helper.ViewContext.View, customViewData, helper.ViewContext.TempData, helper.ViewContext.Writer);
return new HtmlHelper(customViewContext, customViewDataContainer, helper.RouteCollection);
}
private class ViewDataContainer : IViewDataContainer
{
public ViewDataDictionary ViewData { get; set; }
public ViewDataContainer(ViewDataDictionary viewData)
{
ViewData = viewData;
}
}
}
@Html.CustomHtmlHelper(Model.ComplexModel).Display("Name");
@Html.CustomHtmlHelper(Model.ComplexModel).DisplayName("Name);
public static class CustomDisplayHelper
{
public static MvcHtmlString CustomDisplay(this HtmlHelper helper, string expression, Object model)
{
HtmlHelper customHelper = helper.CustomHtmlHelper(model);
return customHelper.Display(expression);
}
public static MvcHtmlString CustomDisplayName(this HtmlHelper helper, string expression, Object model)
{
HtmlHelper customHelper = helper.CustomHtmlHelper(model);
return customHelper.DisplayName(expression);
}
}
@Html.CustomDisplay("Name", Model.ComplexModel)
@Html.CustomDisplayName("Name", Model.ComplexModel)
ModelMetadata.FromStringExpression
要获得“名称标签”,代码如下所示:
ViewDataDictionary myViewData = new ViewDataDictionary(Model.ComplexModel);
ModelMetadata metadata ModelMetadata.FromStringExpression("Name", MyViewData);
String displayName = metadata.DisplayName;
String displayName = metadata.GetDisplayName;
关于asp.net-mvc-4 - ModelMetadata.FromStringExpression 不适用于嵌套属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18144396/
我的模型中有一个带有一些元数据的复杂类型; [ComplexType] public class ComplexModel { [Display("Name Label")] p
我是一名优秀的程序员,十分优秀!