تخفیف های داغ در جشنواره تابستانه توسینسو تخفیف های داغ در جشنواره تابستانه توسینسو
مانده تا پایان تخفیف
مشاهده دوره ها
0

داشتن DisplayNameFor اختصاصی

سلام

آیا می توان برای برنامه ای DisplayNameFor اختصاصی طراحی کنم مثلا رنگ پس زمینه ان ابی باشد

اگربله چگونه باید انجام بدهم

پرسیده شده در 1397/11/16 توسط

5 پاسخ

0

سلام

کد زیر را نوشتم

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Linq.Expressions;
using System.Reflection;
using System.Web;
using System.Web.Mvc;

namespace Appliction
{
    public static MvcHtmlString MyDisplayFor<TModel, TProperty>(this HtmlHelper helper, Expression<Func<TModel, TProperty>> selector)
    {
    var memberExpression = selector.Body as MemberExpression;
        if (memberExpression == null)
    throw new ArgumentException();
    var displayName = memberExpression.Member.GetCustomAttribute<DisplayAttribute>()?.Name ?? memberExpression.Member.Name;

    var tagBuilder = new TagBuilder("label");
    tagBuilder.SetInnerText(displayName);
    tagBuilder.AddCssClass("blue-back");
    // or set style by style attribute
    // tagBuilder.Attributes.Add("style", "background-color: blue;");
    return new MvcHtmlString(tagBuilder.ToString(TagRenderMode.Normal));
    }
}

خطا زیر را می دهد

A namespace cannot directly contain members such as fields or methods

Extension method must be defined in a non-generic static class

پاسخ در 1397/11/16 توسط
0

حال چگونه می توانم در view استفاده کنم

پاسخ در 1397/11/16 توسط
0

سلام، وقت بخیر

برای اینکار می تونید یک Extension Method به صورت زیر بنویسید و عملیات DisplayNameFor رو Customize و یا Extend کنید که پیاده سازی بر اساس نیازتون باید باشه، مثال ساده زیر فقط Background رو آبی می کنه (فقط من کد رو نتونستم تست کنم، اگر جایی مشکلی داشت بگید که بررسیش کنیم)

public static MvcHtmlString MyDisplayFor<TModel, TProperty>(this HtmlHelper helper, Expression<Func<TModel, TProperty>> selector)
{
    var memberExpression = selector.Body as MemberExpression;
    if (memberExpression == null)
        throw new ArgumentException();
    var displayName = memberExpression.Member.GetCustomAttribute<DisplayAttribute>()?.Name ?? memberExpression.Member.Name;

    var tagBuilder = new TagBuilder("label");
    tagBuilder.SetInnerText(displayName);
    tagBuilder.AddCssClass("blue-back");
    // or set style by style attribute
    // tagBuilder.Attributes.Add("style", "background-color: blue;");
    return new MvcHtmlString(tagBuilder.ToString(TagRenderMode.Normal));
}
پاسخ در 1397/11/16 توسط
1

این کد یک Extension Method هست، به صورت زیر می تونید ازش استفاده کنید:

@Html.MyDisplayFor(m=>m.Username)

فقط لطفاً بعد از اینکه به جواب رسیدید پست هایی که جواب هستند رو به عنوان جواب انتخاب کنید تا سوالات بعدیتون هم به جواب برسه.

پاسخ در 1397/11/16 توسط
0

شما نمی تونی مستقیم داخل Namespace متد تعریف کنی. باید یک کلاس باشه!!!!

public static class ExtensionMethods
{
	public static MvcHtmlString MyDisplayFor<TModel, TProperty>(this HtmlHelper helper, Expression<Func<TModel, TProperty>> selector)
	{
	    var memberExpression = selector.Body as MemberExpression;
	    if (memberExpression == null)
	        throw new ArgumentException();
	    var displayName = memberExpression.Member.GetCustomAttribute<DisplayAttribute>()?.Name ?? memberExpression.Member.Name;
	 
	    var tagBuilder = new TagBuilder("label");
	    tagBuilder.SetInnerText(displayName);
	    tagBuilder.AddCssClass("blue-back");
	    // or set style by style attribute
	    // tagBuilder.Attributes.Add("style", "background-color: blue;");
	    return new MvcHtmlString(tagBuilder.ToString(TagRenderMode.Normal));
	}
}

پیشنهاد می کنم یکبار مفاهیم مربوط به کلاس ها و شئ گرایی رو مطالعه کنید!

پاسخ در 1397/11/16 توسط

پاسخ شما