8

目标

我想用 C#.Net 的 Razor Engine 复数单词。我正在使用 MVC 4。

问题

我有以下内容:

<button class="button light-blue filled compare float-right" 
 title="This product is available in @Model["NumberOfMarketsThatHaveThisProduct"]
   market(s)">
   Compare
</button>

我不想使用“市场”,但可以使用“市场”或“市场”。

我已经尝试过的

<button class="button light-blue filled compare float-right" 
 title="This product is available in @Model["NumberOfMarketsThatHaveThisProduct"]
   @if((int)@Model["NumberOfMarketsThatHaveThisProduct"] == 1)
   {
      @: market
   } else {
      @: markets
   }">
   Compare
</button>

但我觉得这样做不舒服。

我必须做什么?

4

4 回答 4

8

您可以使用逻辑:

market@(someNumber == 1 ? "" : "s")
于 2013-06-13T18:51:10.213 回答
5

更好的方法是创建一个自定义 HTML Helper,它将使用 .NET 4 的PluralizationService(在System.Data.Entity.Design.PluralizationServices命名空间中 - 引用System.Data.Entity.Design程序集)正确执行复数,EF6 也使用它来复数表名。

Razor 助手看起来像这样:

namespace CustomHelpers
{
    public static class CustomHelpers
    {
        public static MvcHtmlString Pluralize(this HtmlHelper htmlHelper,
            string source)
        {
            var serv = PluralizationService.CreateService(new System.Globalization.CultureInfo("en-us"));
            var plural = serv.Pluralize(source);

            return MvcHtmlString.Create(plural);
        }
    }
}

您可以使用以下语法在 Razor 中轻松使用此帮助程序:

@using CustomHelpers

<div class="jumbotron">
    <h1>Hi @Html.Pluralize("person")</h1>
</div>

正如你可以想象的那样,它会正确地将PersonPeopleMarketMarkets和许多其他词复数,因为它在内部使用了复数字典。这比使用一些自定义复数代码要好得多。

于 2014-10-01T16:27:32.187 回答
2

最“ASP.NET-MVC-esque”的方式是使用显示模板:

@model int

@if (Model == 1)
{
    @String.Format("{0} market", Model)
}
else
{
    @String.Format("{0} markets", Model)
}

将它放在您的 DisplayTemplates 文件夹中,并将其命名为“Market.cshtml”。然后,在您的模型中,执行以下操作:

[UIHint("Market")]
public int NumberOfMarketsThatHaveThisProduct { get; set; }

在您看来:

@Html.DisplayFor(m => m.NumberOfMarketsThatHaveThisProduct)

通过修改显示模板以在需要时使用本地资源,可以很容易地转换这种方法。

如果您必须重复这一点,这将比在视图中内联执行更简洁。如果它是一次性的,你可能会觉得它矫枉过正。

于 2013-06-13T19:05:17.560 回答
0
@
{
  string last =  Model["NumberOfMarketsThatHaveThisProduct"]==1? "": "'s";

}
<button class="button light-blue filled compare float-right" 
 title="This product is available in @Model["NumberOfMarketsThatHaveThisProduct"] market@last">
   Compare
</button>
于 2013-06-13T18:55:47.167 回答