c# - 字段的 ASP.NET MVC 内联帮助程序

标签 c# asp.net-mvc razor html-helper expression-trees

我需要一个通用的内联助手来显示字段。

这是我目前拥有的:

@helper DisplayField(Func<MyModel, string> field)
{
    if (string.IsNullOrWhiteSpace(field(Model)) == false)
    {
        <div class="row"> @field(Model) </div>     
    }
}

用法:

@DisplayField(m => m.Name)
@DisplayField(m => m.PhoneNumber)

我不知道如何在助手内部显示 Label(DisplayAttribute)。请帮忙。

最佳答案

在您的页面顶部,添加 using for System.Linq.Expressions,例如。

@using System.Linq.Expressions

(或在 web.config 中添加此命名空间)。

然后创建助手,它看起来像这样:

@helper DisplayField(Expression<Func<MyModel, string>> field)
{
    @Html.LabelFor(field)
    @Html.DisplayFor(field)
}

您可以在其中添加额外的逻辑来检查空值等。您最好创建一个 HtmlHelper,这样您就可以使用通用类型参数而不是上面的“MyModel”和“string”。当我上次尝试时,无法将泛型类型参数添加到内联帮助器,例如。以下是不可能的,除非此功能已被添加:

@helper DisplayField<TModel, TValue>(Expression<Func<TModel, TValue>> field)
{
    @Html.LabelFor(field)
    @Html.DisplayFor(field)
}

因此,要获得通用方法,您可以使用自定义 HtmlHelper。为此:

  1. 创建如下文件:

    using System;
    using System.Linq;
    using System.Linq.Expressions;
    using System.Web;
    using System.Web.Mvc;
    using System.Web.Mvc.Html;
    
    namespace MvcApplication1.HtmlHelpers
    {
        public static class HtmlHelpers
        {
            public static MvcHtmlString DisplayFieldFor<TModel, TValue>(
                this HtmlHelper<TModel> helper, 
                Expression<Func<TModel, TValue>> field)
            {
                var labelString = helper.LabelFor(field);
                var displayString = helper.DisplayFor(field);
    
                return MvcHtmlString.Create(
                    labelString.ToString() + 
                    displayString.ToString());
            }
        }
    }
    
  2. 在你的页面中,这样的东西的用法是:

    @Html.DisplayFieldFor(m => m.Name)
    @Html.DisplayFieldFor(m => m.PhoneNumber)
    

等您可能需要检查页面上的使用情况或将 HtmlHelper 的命名空间添加到 web.config 中。

关于c# - 字段的 ASP.NET MVC 内联帮助程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20261279/

相关文章:

c# - 上传/保存视频到数据库或文件系统

asp.net-mvc - Razor MVC 部分 View 分页 url 操作,如何定义指定的 url?

asp.net-mvc - ASP.NET MVC 报告

c# - 实现接口(interface)的 Blazor 组件列表

razor - ArgumentNullException : Value cannot be null. 参数名称:viewData

javascript - 尝试使用 MVC5 razor 中的 bootstrap 3 使 2 个表单字段彼此相邻(内联)

c# - 在 C# 中将 uri 转换为字符串

C#:枚举中的按位运算符(MVC 中的自定义授权)

c# - 在 iOS 上引发的 Xamarin.Forms.WebView.Navigating 事件用于内部导航

ASP.NET 错误 : More than one DbContext was found. 指定要使用哪一个