在将字符串放入网络网格之前,使用 C# 代码设置字符串的格式

本文关键字:字符串 使用 代码 格式 设置 网络 网格 | 更新日期: 2023-09-27 18:30:21

我正在开发一个 asp.net 的MVC 3应用程序。

我有一个 C# 函数,它将字符串作为输入,对其进行格式化,然后返回格式化的字符串。

我有一个.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"),
        ))

我想设置姓名、地址、城市和电话号码的格式

非常感谢任何帮助

在将字符串放入网络网格之前,使用 C# 代码设置字符串的格式

好的,就我个人而言,我从未使用过网格助手,但我认为这将是大方向。假设名称/电话/城市/地址是 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);
}

然后在页面上使用此模型,因此当您将"电话号码"、"城市"和"地址"传递到视图中的网格时,将预先设置它们的格式。

编辑:关于"在哪里放置格式字符串方法"

在我看来,如果您只打算在与人员相关的业务中使用它,则可以将其放在"人员"模型类中:

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

你可以在

模型本身中做这件事。在 的 get 属性(名称、地址、城市和电话号码)中,可以设置字符串的格式。如果您在其他任何地方使用此属性,则可以为所有 4 列(名称、地址、城市和电话号码)添加新属性,并在 get 属性中设置格式并将此列绑定到网格。

例如

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

而不是字符串。格式 您也可以调用定义的函数。

如果您不希望创建 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,则显示"未计划"特殊值。