2012-04-05 10 views
0

私はasp.net MVC 3アプリケーションで作業しています。webgridに入れる前にC#コードで文字列をフォーマットします。

私は文字列を入力として受け取り、それをフォーマットしてから、フォーマットされた文字列を返します。

私はwebgridでデータを埋め込む.cshtmlファイルを持っています。

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

asp.netで私は単純にコードを使ってそれを行うことができます。 MVC 3の新機能ですので、どのように行うかについての提案は非常に高く評価されています。

私はそれが行動で行われるべきであると聞いた。あなたはそれをどうやって手伝ってくれますか?私は名前、住所、市をフォーマットしたい

この

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

のようなC#の機能を見て、この

<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"), 
     )) 

などのWebGridの外観、およびPhoneNumberの

助けてくれてありがとうございました

答えて

0

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

あなたがグリッドにPhoneNumberの、市と住所を渡したときにコントローラのアクションに

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

を、それを使用し、あなたのページにこのモデルを使用するので、

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() 
    { 
    } 
} 

適切なビューモデルを構築しますビューでは、あらかじめフォーマットされています。

EDIT:

「どこformatStringの方法を置くこと」については、私はそれを見ると、あなたが人間関連でそれを使用するつもりなら、あなたは「人」モデルクラスにそれを置くことができますビジネスのみ:

(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();

+0

回答ありがとうございます。私はそれを試しています。 1つの質問:FormatString()関数の実装はどこに置くのですか?モデルクラスでは? – Youssef

+0

さて、それは主にあなたが使用するものに依存します。通常の方法としてモデルクラスに入れることができます。静的にすることも、文字列拡張メソッドにすることもできます。 :) –

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のの。

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の場合は「スケジュールされていない」特別な値が表示されます。

関連する問題