2012-04-05 2 views
0

Ich arbeite an einer asp.net MVC 3-Anwendung.Formatieren Sie eine Zeichenfolge mit einem C# -Code vor dem Einfügen in ein WebGrid

Ich habe eine C# -Funktion, die eine Zeichenfolge als Eingabe nimmt, formatiert und dann die formatierte Zeichenfolge zurückgibt.

Ich habe eine .cshtml-Datei, wo ich Daten in einem Webgrid füllen.

Wenn ich die Daten im WebGrid ausfülle, möchte ich es zunächst mit einer C# -Funktion formatieren und dann die Ergebnisse füllen.

In asp.net kann ich einfach den Code dahinter verwenden, um es zu tun. aber ich bin neu in MVC 3, daher werden alle Vorschläge, wie man es macht, sehr geschätzt.

Ich hörte, dass es in der Aktion getan werden sollte. Kannst du mir helfen, wie das geht?

die C# Funktion aussehen wie dieses aussehen

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

die WebGrid wie diese

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

Ich möchte den Namen zu formatieren, Adresse, Stadt und Phone

Vielen Dank für jede Hilfe

Antwort

0

OK, persönlich habe ich noch nie den Grid-Helfer benutzt, aber ich nehme an, das wäre die allgemeine Richtung. Angenommen, Name/Telefon/Stadt/Adresse sind Eigenschaften einer Personenklasse.

Bauen Sie sich ein zutreffendes Bild Modell

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

es in Controller-Aktion verwendet

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

Und dann dieses Modell auf Ihrer Seite verwenden, so dass, wenn Sie passieren Phone, Stadt und Adresse an das Netz in die Ansicht, Sie haben sie vorformatiert.

EDIT: In Bezug auf

Wie ich es sehe ‚wo die Formatstring-Methode setzen‘, können Sie es in der ‚Person‘ Modellklasse setzen, wenn Sie es in der Person bezogen verwenden werden Nur für Unternehmen:

(Wenn die Klasse Person von zEF, können Sie es in einer anderen Datei tun, damit es ordentlich aussieht, wie unten)

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

oder

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

oder wenn Sie Lust fühlen (oder - praktisch - du gehst es in jeder anderen Situation für String-Formatierung) zu verwenden, können Sie die Methode als String-Erweiterung für Bequemlichkeit definieren:

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

Und dann: PhoneNumber = PhoneNumber.FormatString();

+0

Vielen Dank für Ihre Antwort Ich versuche es. eine Frage: Wo setze ich die Implementierung der FormatString() -Funktion? in der Modellklasse? – Youssef

+0

Nun, das hängt hauptsächlich davon ab, wofür Sie es verwenden würden, Sie können es als normale Methode in die Modellklasse einfügen, Sie können es sogar als statisch oder als String-Extension-Methode definieren. :) –

0

Sie können das Ding in Model selbst tun. In get-Eigenschaft von (Name, Adresse, Stadt und Telefonnummer) können Sie die Zeichenfolge formatieren. Wenn Sie diese Eigenschaft an einer anderen Stelle verwenden, können Sie neue Eigenschaften für alle 4 Spalten hinzufügen (Name, Adresse, Ort und Telefonnummer) und in der get-Eigenschaft das Format festlegen und diese Spalten an das Raster binden.

Zum Beispiel

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

Statt string.Format können Sie Ihre definierte Funktion auch aufrufen.

0

Wenn Sie nicht wünschen, eine Ansichtsmodell oder benutzerdefinierte Funktion zu erstellen, und wollen einfach nur einige Formatierungen in der WebGrid "on-the-fly" zu tun, können Sie die folgende Syntax verwenden:

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

Die Geplante Spalte (vom Typ DateTime?) wird im angegebenen Format angezeigt oder der Sonderwert "Nicht geplant" wird angezeigt, wenn es null ist.

Verwandte Themen