0

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

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

我有一个 .cshtml 文件,我在其中将数据填充到 webgrid 中。

在 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

好的,我个人从未使用过 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 传递到视图中的网格时,您将对它们进行预格式化。

编辑:关于“在哪里放置 FormatString 方法”

如我所见,如果您只打算在与 Person 相关的业务中使用它,则可以将它放在“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 回答
0

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

例如

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 “on-the-fly” 中进行一些格式化,则可以使用以下语法:

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

Scheduled 列(类型为DateTime?)将以给定格式显示,如果是 ,则显示“Unscheduled”特殊值null

于 2012-09-18T18:41:20.450 回答