ASP.NET MVC4 

@Html 확장메서드


Grid Table



 public static MvcHtmlString Table<T>(this HtmlHelper htmlHelper, string id, IEnumerable<T> sorece, bool isSubGridDisplay = false)  
     {  
       if (sorece == null || sorece.Count() < 1)  
       {  
         string table = "<table id='" + id + "' class='cssEmptyTable'><tr><td style='text-align:center;'>데이터가 없습니다.</td></tr></table>";  
         return MvcHtmlString.Create(table);  
       }  
       PropertyInfo[] propertyinfos;  
       propertyinfos = typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance);  
       List<KeyValuePair<string, Type>> tableHeader = new List<KeyValuePair<string, Type>>();  
       List<KeyValuePair<string, Type>> tableBody = new List<KeyValuePair<string, Type>>();  
       List<KeyValuePair<string, Type>> columnProperty = new List<KeyValuePair<string, Type>>();  
       foreach (PropertyInfo info in propertyinfos)  
       {  
         object[] attributes = info.GetCustomAttributes(typeof(biz.Data.TableGridAttribute), false);  
         if (attributes.Count() > 0)  
         {  
           if (((biz.Data.TableGridAttribute)attributes[0]).IsHideGridDisplay) continue;  
           if (((biz.Data.TableGridAttribute)attributes[0]).ColumnType == typeof(decimal))  
           {  
             columnProperty.Add(new KeyValuePair<string, Type>(info.Name, ((biz.Data.TableGridAttribute)attributes[0]).ColumnType));  
           }  
         }  
         else  
         {  
           columnProperty.Add(new KeyValuePair<string, Type>(info.Name, typeof(string)));  
         }  
         var metadata = ModelMetadataProviders.Current.GetMetadataForProperty(  
         () => Activator.CreateInstance<T>(), typeof(T), info.Name);  
         var name = metadata.DisplayName;  
         if (string.IsNullOrEmpty(name)) name = info.Name;  
         tableHeader.Add(new KeyValuePair<string, Type>(name, info.PropertyType));  
         tableBody.Add(new KeyValuePair<string, Type>(info.Name, info.PropertyType));  
       }  
       StringBuilder html = new StringBuilder(256);  
       html.Append("<table id='" + id + "'>");  
       html.Append("<tr>");  
       foreach (var header in tableHeader)  
       {  
         if (header.Value.IsGenericType && !header.Value.IsValueType)  
         {  
           if(isSubGridDisplay)  
             html.Append("<th>" + header.Key + "</th>");  
         }  
         else  
         {  
           html.Append("<th>" + header.Key + "</th>");  
         }  
       }  
       html.Append("</tr>");  
       int i = 1;  
       foreach (var src in sorece)  
       {  
         PropertyDescriptorCollection coll = TypeDescriptor.GetProperties(src);  
         string clss = ((i % 2) == 0) ? "clsEven" : "clsOdd";  
         html.Append("<tr class='" + clss + "'>");  
         int j = 0;  
         foreach (var body in tableBody)  
         {  
           if (body.Value.IsGenericType && !body.Value.IsValueType)  
           {  
             if (isSubGridDisplay)  
             {  
               html.Append("<td>");  
               dynamic list = coll[body.Key].GetValue(src);  
               html.Append(Table(htmlHelper, "_sub_" + id, list, isSubGridDisplay));  
               html.Append("</td>");  
             }    
           }  
           else  
           {  
             KeyValuePair<string, Type> clm =  columnProperty[j];  
             if (clm.Value == typeof(decimal))  
             {  
               var _value = coll[body.Key].GetValue(src);  
               if (_value != null)  
               {  
                 html.Append("<td class='clsNumberField'>" + decimal.Parse(_value.ToString()).ToString("###,###.#") + "</td>");  
               }  
               else  
               {  
                 html.Append("<td>" + coll[body.Key].GetValue(src) + "</td>");  
               }  
             }  
             else  
             {  
               html.Append("<td>" + coll[body.Key].GetValue(src) + "</td>");  
             }  
           }  
           j++;  
         }  
         i++;  
         html.Append("</tr>");  
       }  
       var footer = "</table>";  
       html.Append(footer);  
       return MvcHtmlString.Create(html.ToString());  
     }  


[AttributeUsage(AttributeTargets.Property)]
    public class TableGridAttribute : System.Attribute
    {
        public bool IsHideGridDisplay { get; set; }

        public Type ColumnType { get; set; } 
    }


저작자 표시 비영리 변경 금지
신고

'개발 > C# / ASP.NET' 카테고리의 다른 글

ASP.NET MVC Grid Table  (0) 2014.07.29
[MVC3]ImageActionLink  (0) 2011.11.10
[MVC] DropDownList에 Enum 바인딩  (0) 2011.09.21
C# machine key 생성하기  (0) 2011.07.05
ImageActionLink

 
public static MvcHtmlString ImageActionLink(this HtmlHelper htmlHelper, string imageUrl, string altText, string actionName, object routeValues, object htmlAttributes = null)
        {
            TagBuilder imgBuilder = new TagBuilder("img");
            imgBuilder.MergeAttribute("src", imageUrl);
            imgBuilder.MergeAttribute("alt", altText);

            

            var urlHelper = new UrlHelper(htmlHelper.ViewContext.RequestContext, htmlHelper.RouteCollection);
            TagBuilder linkBuilder = new TagBuilder("a");
            linkBuilder.MergeAttribute("href", urlHelper.Action(actionName, routeValues));

            var text = linkBuilder.ToString(TagRenderMode.StartTag);
            text += imgBuilder.ToString(TagRenderMode.SelfClosing);
            text += linkBuilder.ToString(TagRenderMode.EndTag);

            if (htmlAttributes != null)
            {
                var attributes = HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes);
                linkBuilder.MergeAttributes(attributes);
            }

            return MvcHtmlString.Create(text); 

        }

..

저작자 표시 비영리 변경 금지
신고

'개발 > C# / ASP.NET' 카테고리의 다른 글

ASP.NET MVC Grid Table  (0) 2014.07.29
[MVC3]ImageActionLink  (0) 2011.11.10
[MVC] DropDownList에 Enum 바인딩  (0) 2011.09.21
C# machine key 생성하기  (0) 2011.07.05
MVC DropDownList에 Enum 바인딩

 
public static IEnumerable ToSelectList(Enum enumValue)
    {
        List items = new List();
        items.Add(new SelectListItem() { Selected = true, Text = "전체", Value = "" });
        
         
        var slt = from Enum e in Enum.GetValues(enumValue.GetType())
               select new SelectListItem
               {
                   Selected = false,
                   Text = e.ToString(),
                   Value = e.ToString()
               };

        items.AddRange(slt);

        return items.AsEnumerable();
    }

@Html.DropDownList("머시기", ToSelectList(enum타입))
저작자 표시 비영리 변경 금지
신고

'개발 > C# / ASP.NET' 카테고리의 다른 글

[MVC3]ImageActionLink  (0) 2011.11.10
[MVC] DropDownList에 Enum 바인딩  (0) 2011.09.21
C# machine key 생성하기  (0) 2011.07.05
[MVC] EnumDropDownList  (0) 2011.06.22
Visual C# .NET을 사용하여 폼 인증에서 사용할 키를 만드는 방
http://support.microsoft.com/default.aspx?scid=312906


using System;
using System.Text;
using System.Security.Cryptography;

namespace Crypto
{
    public class KeyCreator
    {
        public static void Main(String[] args)
        {			
            String[] commandLineArgs = System.Environment.GetCommandLineArgs();
            string decryptionKey = CreateKey(System.Convert.ToInt32(commandLineArgs[1]));
            string validationKey = CreateKey(System.Convert.ToInt32(commandLineArgs[2]));

            Console.WriteLine("", validationKey, decryptionKey);
        }	

        static String CreateKey(int numBytes) 
        {
            RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
            byte[] buff = new byte[numBytes];

            rng.GetBytes(buff);
            return BytesToHexString(buff);
        }

        static String BytesToHexString(byte[] bytes) 
        {
            StringBuilder hexString = new StringBuilder(64);

            for (int counter = 0; counter < bytes.Length; counter++) 
            {
                hexString.Append(String.Format("{0:X2}", bytes[counter]));
            }
            return hexString.ToString();
        }
    }
}

저작자 표시 비영리 변경 금지
신고

'개발 > C# / ASP.NET' 카테고리의 다른 글

[MVC] DropDownList에 Enum 바인딩  (0) 2011.09.21
C# machine key 생성하기  (0) 2011.07.05
[MVC] EnumDropDownList  (0) 2011.06.22
C# 한글깨짐 처리  (1) 2011.04.20
MVC

MVC 에서 Enum Type을 DropDownList에 바인딩 하는 코드이다.

  1. public static class CommonUtil
  2.     {
  3.         private static readonly SelectListItem[] SingleEmptyItem = new[] { new SelectListItem { Text = "", Value = "" } };
  4.  
  5.         public static MvcHtmlString EnumDropDownListFor<TModel, TEnum>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TEnum>> expression, SelectListItem firstSelectItem)
  6.         {
  7.             ModelMetadata metadata = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData);
  8.             Type enumType = GetNonNullableModelType(metadata);
  9.             IEnumerable<TEnum> values = Enum.GetValues(enumType).Cast<TEnum>();
  10.  
  11.             TypeConverter converter = TypeDescriptor.GetConverter(enumType);
  12.  
  13.             IEnumerable<SelectListItem> items =
  14.                 from value in values
  15.                 select new SelectListItem
  16.                 {
  17.                     Text = converter.ConvertToString(value),
  18.                     Value = value.ToString()
  19.                 };
  20.  
  21.             if (metadata.IsNullableValueType)
  22.             {
  23.                 items = SingleEmptyItem.Concat(items);
  24.             }
  25.  
  26.             
  27.             if (firstSelectItem != null)
  28.             {
  29.                 firstSelectItem.Selected = true;
  30.                 SelectListItem[] newItem = new SelectListItem[1];
  31.                 newItem[0] = firstSelectItem;
  32.                
  33.                 items = newItem.Concat(items);
  34.             }
  35.                         
  36.             MvcHtmlString html = htmlHelper.DropDownList("DDL" + metadata.PropertyName, items);
  37.  
  38.             return html;
  39.         }
  40.  
  41.         
  42.         private static Type GetNonNullableModelType(ModelMetadata modelMetadata)
  43.         {
  44.             Type realModelType = modelMetadata.ModelType;
  45.  
  46.             Type underlyingType = Nullable.GetUnderlyingTy

  1. @Html.EnumDropDownListFor(model => model.EnumColor, new SelectListItem { Text = "--", Value = "" })
 
저작자 표시 비영리 변경 금지
신고

'개발 > C# / ASP.NET' 카테고리의 다른 글

C# machine key 생성하기  (0) 2011.07.05
[MVC] EnumDropDownList  (0) 2011.06.22
C# 한글깨짐 처리  (1) 2011.04.20
자동 생성된 Machinekey 읽기  (0) 2011.04.15
 이미 사용중인 Sybase에 접근해서 내용을 가져오는데, 도무지 한글이 깨진것을 어떻게 할수가 없어서...
이렇게 확인부터 하자

깨진 한글을 어떻게 제대로 표시할지 찾아보자..
원본 문자열이 어떤방식의 charset으로 되어 있는지.. 어떻게 다시 제대로 표시할지 찾아보기 위해 간단한 메서드를 만들었다.

[코드]
       public void convertCheck(string str)
        {
            Encoding encKr = Encoding.GetEncoding("euc-kr");
            EncodingInfo[] encods = Encoding.GetEncodings();
            Encoding destEnc = Encoding.UTF8;

            foreach (EncodingInfo ec in encods)
            {
                Encoding enc = ec.GetEncoding();
                byte[] sorceBytes = enc.GetBytes(str);
                byte[] encBytes = Encoding.Convert(encKr, destEnc, sorceBytes);

                System.Diagnostics.Debug.WriteLine(string.Format("{0}({1}) : {2}", enc.EncodingName, enc.BodyName, destEnc.GetString(encBytes)));
            }            
        }

string  str 을 받아서 지원가능한 모든 인코딩으로 돌려 표시한다.
이때 제대로 표시되는 것이 있다면 해당 인코딩을 쓰면 될 것이다. ㅋㅋ
몇시간을 지x을 했네 그려~ ㅠㅠ
Sybase 정말~ 쓰기싫다.. 잘 붙지도 않고.. 한글깨지고... 덴장!!!!
 
저작자 표시 비영리 변경 금지
신고

'개발 > C# / ASP.NET' 카테고리의 다른 글

[MVC] EnumDropDownList  (0) 2011.06.22
C# 한글깨짐 처리  (1) 2011.04.20
자동 생성된 Machinekey 읽기  (0) 2011.04.15
[C#] sysbase 접속  (0) 2011.02.21
  1. 그냥떠나는거야 2017.03.30 16:10 신고

    다른 서버에서 json을 받았는데 한글이 깨져서 스트레스 였는데, 덕분에 해결했습니다 .
    감사합니다. ^^

Web.Config에 따로 설정을 하면 machinekey를 읽을 필요는 없겠지만서도.. 
나처럼 필요한 경우가 생길지도 몰라 구글링을 통해서 얻은 정보를 공유한다.


protected void Page_Load (object sender, EventArgs e)
{
  MachineKeySection section = (MachineKeySection) 
      ConfigurationManager.GetSection ("system.web/machineKey");

  BindingFlags flags = 
      BindingFlags.Instance | 
      BindingFlags.NonPublic | 
      BindingFlags.GetProperty;

  Func propertyReader = name => (byte[]) section
      .GetType ()
      .GetProperty (name, flags)
      .GetValue (section, null);

  string key = ConvertToHex (
    propertyReader ("DecryptionKeyInternal"));
    
  string iv = ConvertToHex (
    propertyReader ("ValidationKeyInternal"));
}

private string ConvertToHex (byte[] binary)
{
  return binary.Aggregate (
      new StringBuilder (), 
      (acc, c) => acc.AppendFormat ("{0:x2}", c), 
      acc => acc.ToString());
}// 뒤에요거 왜붙지? => 


출처 : 
http://aspnetresources.com/blog/how_to_read_auto_generated_machinekey 
저작자 표시 비영리 변경 금지
신고

'개발 > C# / ASP.NET' 카테고리의 다른 글

C# 한글깨짐 처리  (1) 2011.04.20
자동 생성된 Machinekey 읽기  (0) 2011.04.15
[C#] sysbase 접속  (0) 2011.02.21
Windows 2008 Server - WCF 404.7 error  (0) 2010.12.28
[C#] 
Sybase.Data.AseClient 이용해서 Sybase 접속시 안되서 지x 좀 하다가 
( 온갖 provider 도 설치하고 client 프로그램도 설치하고 난리를 쳤는데 )
아래와 같이 dll을 찾아서 힘들게 접속이 됬네..

우씨~ 거지같은 sybase


저작자 표시 비영리 변경 금지
신고

'개발 > C# / ASP.NET' 카테고리의 다른 글

자동 생성된 Machinekey 읽기  (0) 2011.04.15
[C#] sysbase 접속  (0) 2011.02.21
Windows 2008 Server - WCF 404.7 error  (0) 2010.12.28
실행중인 클래스명을 조회  (0) 2010.10.31


여기 참조 하세요.

간략하게는 
제어판 -> 프로그램 및 기능 -> 윈도우즈 기능 사용함/사용 안함
-> 서버관리자가 뜹니다. 여기서 -> 기능 -> 기능추가 -> .Net Framework 3.0 기능 하위에 WCF 활성화

이외에 다른 원인이 있을수도 있지만.. 제 경우는 위처럼 WCF를 활성화 안해서 그랬습니다.

.. 여기까지
눈이 많이 왔네요..


저작자 표시 비영리 변경 금지
신고

'개발 > C# / ASP.NET' 카테고리의 다른 글

[C#] sysbase 접속  (0) 2011.02.21
Windows 2008 Server - WCF 404.7 error  (0) 2010.12.28
실행중인 클래스명을 조회  (0) 2010.10.31
C# - Splash Screen 만들기  (0) 2010.08.16
재 프로젝트에 있는 모든 UI 클래스 명을 얻어와 보자!

    1 namespace NSCL

    2 {

    3     public partial class Form1 : Form

    4     {

    5         public Form1()

    6         {

    7             InitializeComponent();

    8             this.Load += new EventHandler(Form1_Load);

    9         }

   10 

   11         void Form1_Load(object sender, EventArgs e)

   12         {

   13             GetClassNames();

   14         }

   15 

   16         private void GetClassNames()

   17         {

   18             List<string> clsNames = new List<string>();

   19             Assembly asm = Assembly.GetExecutingAssembly();

   20 

   21             foreach (Type t in asm.GetTypes())

   22             {

   23                 if (t.BaseType.Name == "Form")

   24                 {

   25                     clsNames.Add(t.Name);

   26                 }

   27             }

   28 

   29             listBox1.DataSource = clsNames;

   30         }

   31     }

   32 }


소스는 현재 실행중인 어셈블리를 얻어와서, window Form 클래스를 상속받은 UI 클래스만 가져와
ListBox에 뿌려준다.

저작자 표시 비영리 변경 금지
신고

+ Recent posts