0

私はasp.net MVC 3アプリケーションに取り組んでいます。

入力として文字列を受け取り、それをフォーマットしてから、フォーマットされた文字列を返す C# 関数があります。

WebGrid にデータを入力する .cshtml ファイルがあります。

webgrid にデータを入力するときは、最初に C# 関数を使用してフォーマットし、次に結果を入力したいと考えています。

asp.net では、コード ビハインドを使用して簡単に実行できます。しかし、私はMVC 3を初めて使用するので、その方法に関する提案は大歓迎です。

アクションでやるべきだと聞きました。それを行う方法について私を助けることができますか?

C#関数は次のようになります

public string FormatString (string input)
{
    // I Format the string and return it
} 

ウェブグリッドは次のようになります

<div id="GridDiv">
@grid.GetHtml(
        htmlAttributes: new { id = "grid" },
        tableStyle: "grid",
        headerStyle: "header",
        rowStyle: "row",
        footerStyle: "footer",
        alternatingRowStyle: "altRow",
        columns: grid.Columns(
            grid.Column("Name", "Name", style: "Centered", canSort: true),
            grid.Column("Address", "Address", canSort: true),
            grid.Column("City", "City", canSort: true),
            grid.Column("PhoneNumber", "Phone Number", style: "Centered"),
        ))

名前、住所、都市、電話番号の書式を設定したい

助けてくれてありがとう

4

3 に答える 3

0

モデル自体でそれを行うことができます。(Name、Address、City、および PhoneNumber) の get プロパティで、文字列をフォーマットできます。このプロパティを他の場所で使用している場合は、4 つの列 (Name、Address、City、および PhoneNumber) すべてに新しいプロパティを追加し、get プロパティでフォーマットを設定して、この列をグリッドにバインドできます。

例えば

private string temp;
public string Temp { get { return string.Format("Hi {0}",this.temp);} set{}}

string.Format の代わりに、定義した関数を呼び出すこともできます。

于 2012-04-05T10:31:22.573 に答える
0

ViewModel またはカスタム関数を作成せずに、単に WebGrid で「オンザフライ」でフォーマットを行いたい場合は、次の構文を使用できます。

<div id="GridDiv">
@grid.GetHtml(
    htmlAttributes: new { id = "grid" },
    tableStyle: "grid",
    headerStyle: "header",
    rowStyle: "row",
    footerStyle: "footer",
    alternatingRowStyle: "altRow",
    columns: grid.Columns(
        grid.Column("Name", "Name", style: "Centered", canSort: true),
        grid.Column("Scheduled", header: "Scheduled", 
            format: @<text>@(String.Format("{0:yyyy/MM/dd HH:mm}",item.DateScheduled ?? "Unscheduled"))</text>),
    ))
</div>

スケジュールされた列 (タイプDateTime?) は、指定された形式で表示されるか、「スケジュールされていない」特別な値が表示されますnull

于 2012-09-18T18:41:20.450 に答える
0

OK、個人的には Grid ヘルパーを使用したことはありませんが、これが一般的な方向性だと思います。Name/Phone/City/Address が Person クラスのプロパティであるとします。

適切なビュー モデルを構築する

public sealed class MyViewModel
{
    public string Name {get; set;}
    public string Address {get; set;}
    public string City {get; set;}
    public string PhoneNumber {get; set;}

    public MyViewModel(Person person)
    {
        FillViewModel(person); // either copy the given properties by hand, use Automapper, or write your own simple (although quite general) mapping method using reflection
        Address = FormatString(Address);
        City = FormatString(City);
        PhoneNumber = FormatString(PhoneNumber);
    }
    public MyViewModel()
    { 
    }
}

コントローラーアクションで使用する

public ActionResult ShowGrid(int personId)
{
    var person = SomeKindOfDatabaseAccess.GetPerson(personId);
    var viewModel = new MyViewModel(person);
    return View(viewModel);
}

次に、このモデルをページで使用して、PhoneNumber、City、および Address をビューのグリッドに渡すと、事前にフォーマットされます。

EDIT:「FormatStringメソッドを置く場所」について

個人関連のビジネスでのみ使用する場合は、「Person」モデル クラスに入れることができます。

(Person クラスが EF などから生成されている場合は、別のファイルで行うことができるので、以下のように見栄えがします)

public sealed partial class Person
{
     public string FormatString(string input)
     {
         ...
     }
}         

また

public sealed partial class Person
{
     public static string FormatString(string input)
     {
         ...
     }
}         

または、空想が好きな場合 (または、より実際的には、文字列の書式設定のために他の状況で使用する場合)、便利なようにメソッドを文字列拡張として定義できます。

public static class Extensions
{
     public static string FormatString(this string input)
     {
         ...
     }
}

その後:PhoneNumber = PhoneNumber.FormatString();

于 2012-04-05T10:25:51.000 に答える