在将字符串放入网络网格之前,使用 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"),
))
我想设置姓名、地址、城市和电话号码的格式
非常感谢任何帮助
好的,就我个人而言,我从未使用过网格助手,但我认为这将是大方向。假设名称/电话/城市/地址是 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
,则显示"未计划"特殊值。