8

私はMVCを初めて使用しますが、これに対する解決策をオンラインで見つけられませんでした。

私は次のようなhtmlを持っています:

@Html.DisplayFor(model => model.Address1) <br />

address1の最初の文字はすべて大文字にします。たとえば、SomethingRoadではなくSomethingRoadにします。

これで、クラスクライアントとプロパティAddress1があり、EFを使用して次のようにアドレスを取得します。

 public class MyDBContext : DbContext
    {
        public DbSet<Client> Clients { get; set; }
    }

それが理にかなっていることを願っています。

4

9 に答える 9

21

簡単な解決策は

Html.EditorFor(model => model.FirstName, new { htmlAttributes = new { class = "form-control" } })

次に、以下のcssを使用して、最初の文字を大文字にします。

.form-control {
text-transform:capitalize;
}
于 2015-08-24T10:28:52.030 に答える
6

タイトルケースClientで返されるプロパティを使用して、の部分クラスを追加できます。Address1

public partial class Client
{
    public string TitleCaseAddress1
    {
        get
        {
            return System.Globalization.CultureInfo.CurrentCulture.TextInfo.ToTitleCase(this.Address1);
        }
    }
}

次に、Razorで使用TitleCaseAddress1します。

@Html.DisplayFor(model => model.TitleCaseAddress1) <br />

参照: http: //msdn.microsoft.com/en-us/library/system.globalization.textinfo.totitlecase (v = vs.100).aspx

于 2012-10-03T16:44:36.133 に答える
4

プレゼンテーション層とデータアクセス層を分離しておくのが最善です。ORM/エンティティフレームワークオブジェクトをラップまたは変換するビューモデルを作成します。

public class ClientViewModel
{
    private Client _dao;

    public ClientViewModel(Client dao)
    {
        _dao = dao;
    }

    public string Address 
    { 
        get
        {
            // modify the address as needed here
            return _dao.Address;
        }
    }
}
于 2012-10-03T16:47:35.727 に答える
4

Razorで厳密にこれを実行しようとしている人のために、この例はログインしたユーザー名を変換しています。文字列変数に置き換えます。

これは最初の文字を取得し、上位に変換します。

@(@User.Identity.GetUserName().ToString().Substring(0, 1).ToUpper())

これにより、残りの文字列が取得されます。

@(@User.Identity.GetUserName().ToString().Substring(1, 
    User.Identity.GetUserName().ToString().Length - 1))

文字列全体を取得するには、そのようにそれらを組み合わせるだけです。

@(@User.Identity.GetUserName().ToString().Substring(0, 
    1).ToUpper())@(@User.Identity.GetUserName().ToString().Substring(1, 
    User.Identity.GetUserName().ToString().Length - 1))
于 2016-01-06T17:50:28.330 に答える
3

これがあなたが望むことを達成するための正しい方法です、私はあなたのためにそれを実装しました。

HtmlStringFormatter.Create()デリゲートを渡して、独自の匿名フォーマッターを作成できるものがあります。

コードサンプル:

// This just upper case all the letters.
@Html.DisplayFormatFor(model => model.Address, HtmlStringFormatter.Create(s=> s.ToUpper()))

カスタムフォーマッタを作成する場合は、そのデリゲートプロパティを派生さHtmlStringFormatterせて、実行したい操作に設定します。

コードサンプル:

// Here I use the Capital Letter custom formatter.
@Html.DisplayFormatFor(model => model.Address, new CapitalLetterFormatter())

すべてのクラス:

namespace MvcPlay.HelperExtensions
{
    public static class HelperExtensions
    {
        public static MvcHtmlString DisplayFormatFor<TModel, TValue>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TValue>> expression, HtmlStringFormatter formatter)
        {
            var output = helper.DisplayFor(expression);
            string formatted = formatter.Delegate.Invoke(output.ToString());
            return MvcHtmlString.Create(formatted);
        }
    }
}

namespace MvcPlay.HtmlStringFormatting
{
    public class HtmlStringFormatter
    {
        public delegate string FormatDelegate(string s);

        public FormatDelegate Delegate;
        public Expression<FormatDelegate> formatExpression;

        private HtmlStringFormatter(FormatDelegate expression)
        {
            Delegate = expression;
        }

        protected HtmlStringFormatter()
        {

        }

        public static HtmlStringFormatter Create(FormatDelegate expression)
        {
            return new HtmlStringFormatter(expression);
        }
    }

    public class CapitalLetterFormatter : HtmlStringFormatter
    {
        public CapitalLetterFormatter()
        {
            Delegate =
                s => new CultureInfo("en-US", false).TextInfo.ToTitleCase(s).ToString(CultureInfo.InvariantCulture);

        }
    }
}

次の行をViewsフォルダーのWeb.Configに追加することを忘れないでください。

<add namespace="MvcPlay.HelperExtensions" />
<add namespace="MvcPlay.HtmlStringFormatting"/>

これには、フォーマッターとヘルパー拡張機能が自動的に含まれるため、使用するすべてのビュー内に含める必要はありません。

于 2012-10-03T19:36:21.243 に答える
2

これにはC#コードを使用できます:例: http: //www.dotnetperls.com/uppercase-first-letter

using System;

class Program
{
    static void Main()
    {
    Console.WriteLine(UppercaseFirst("samuel"));
    Console.WriteLine(UppercaseFirst("julia"));
    Console.WriteLine(UppercaseFirst("john smith"));
    }

    static string UppercaseFirst(string s)
    {
    // Check for empty string.
    if (string.IsNullOrEmpty(s))
    {
        return string.Empty;
    }
    // Return char and concat substring.
    return char.ToUpper(s[0]) + s.Substring(1);
    }
}
于 2012-10-03T16:37:36.950 に答える
1

次のように使用するだけです

@System.Globalization.CultureInfo.CurrentCulture.TextInfo.ToTitleCase(sampleText)
于 2018-02-21T04:53:50.057 に答える
0

元の質問は、文字列全体のすべての単語を大文字にすることを指していたことを私は知っています。しかし、私は文字列の最初の文字を大文字にするための解決策を見つけようとしてここに来ました。OPの最善の解決策としてkiflayの回答に同意しました。しかし、私の使用法では、最初の文字だけを変更するように拡張しました。

CSS:

blockquote::first-letter {
text-transform: capitalize;}
于 2017-04-18T20:45:57.380 に答える
0

Bootstrap 4.xをRazorで使用すると、CSSを使用して最初の文字を大文字にします。

<p class="text-capitalize">CapiTaliZed text.</p>
于 2020-02-18T14:33:02.277 に答える