C# 如何将单词/字符串复数化? 目标

C# 如何将单词/字符串复数化? 目标,c#,asp.net-mvc-4,razor,C#,Asp.net Mvc 4,Razor,我想用C#Net的Razor引擎实现单词的复数。我使用的是MVC4 问题 我有以下资料: <button class="button light-blue filled compare float-right" title="This product is available in @Model["NumberOfMarketsThatHaveThisProduct"] market(s)"> Compare </button> 比较 我不想使用“市

我想用C#Net的Razor引擎实现单词的复数。我使用的是MVC4

问题 我有以下资料:

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

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

我已经试过了

比较
但我觉得这样做不舒服

我必须做什么?

您可以使用逻辑:

market@(someNumber == 1 ? "" : "s")
@
{
字符串last=Model[“NumberOfMarketsHathatHatThisProduct”]==1?”:“'s”;
}
比较
最“ASP.NET MVC风格”的方式是使用显示模板:

@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)
通过修改显示模板以在需要时使用本地资源,可以非常轻松地转换这种方法


如果您必须经常重复此操作,那么这将比在视图中内联执行更整洁。如果是一次性的,您可能会发现它有点过分。

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

剃须刀辅助对象如下所示:

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>
@使用CustomHelpers
Hi@Html.Pluralize(“人”)

你可以想象,它将正确地将市场市场和许多其他词进行多重化,因为它内部使用了多重化词典。这比使用一些自定义的复数代码要好得多。

你确定你的软件总是用英语吗?实际上他用的是葡萄牙语,@svick。是的,我肯定我不会翻译它,因为他是为了地区目的。你的
最后一个
字符串中没有包含2。如果
Model[“NumberOfMarketsThathatThisProduct”]
=
2
,则不会打印
s
。@svick tnx它应该等于1小时,现在我明白你的答案了。你是对的——逻辑就足够了。谢谢你好谢谢你的加入。DisplayTemplates它是Views目录中的文件夹?@chiefGui是的,“Views/ControllerName/DisplayTemplates”或“Views/Shared/DisplayTemplates”都可以。噢@AntP,谢谢!但是您的代码有语法问题。Visual Studio向我展示了以下内容:
只有赋值、调用、递增、递减、等待和新对象表达式可以用作语句。
当我的鼠标悬停在“市场/市场”字上时。@chiefGui看起来我的剃须刀逃逸很时髦-我编辑了我的帖子,这有帮助吗?
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);
        }
    }
}
@using CustomHelpers

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