我正在使用带Razor的MVC 3。我无法弄清楚如何编写字符串扩展正则表达式来采取这个:
This_is_some_text
显示:
这是一些文字
我为下拉列表设置了一些枚举,所以它们就这样出现了(显然我不能用空格创建一个枚举):
public enum MyProperty
{
This_is_some_text,
This_is_some_other_text
}
我无法弄清楚正则表达式是做我想要的,如果我这样做:
public static string EnumToDisplay(this string str)
{
return Regex.Replace(str, "[What is the regex I should use?]");
}
作为对我的奖励,我还想添加句号“。”到枚举结束。这样做的原因是我有强迫症,我的枚举采用短句形式。 :)
谢谢!
答案 0 :(得分:3)
为什么不使用String.Replace()
呢? RegEx似乎有点矫枉过正。
public static string EnumToDisplay(this string str)
{
return str.Replace('_', ' ') + ".";
}
答案 1 :(得分:2)
为什么要使用正则表达式?一个非常聪明的人说过,我引用:
有些人在遇到问题时会想“我知道,我会用 正则表达式。“现在他们有两个问题。
如何使用专为此目的而设计的[Display]
属性:
public enum MyProperty
{
[Display(Name = "This is some super text")]
This_is_some_text,
[Display(Name = "And this is some other text")]
This_is_some_other_text
}
然后编写自定义Html帮助程序:
public static class HtmlExtensions
{
public static IHtmlString DisplayForEnum<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression)
{
if (!typeof(TProperty).IsEnum)
{
throw new ArgumentException("sorry this helper is inteded to be used with enum types");
}
var model = htmlHelper.ViewData.Model;
if (htmlHelper.ViewData.Model == null)
{
return MvcHtmlString.Empty;
}
var field = typeof(TProperty).GetField(expression.Compile()(htmlHelper.ViewData.Model).ToString());
if (field == null)
{
return new HtmlString(htmlHelper.Encode(htmlHelper.ViewData.Model.ToString()));
}
var display = field.GetCustomAttributes(typeof(DisplayAttribute), true).FirstOrDefault() as DisplayAttribute;
if (display == null)
{
return new HtmlString(htmlHelper.Encode(htmlHelper.ViewData.Model.ToString()));
}
return new HtmlString(htmlHelper.Encode(display.Name));
}
}
所以现在假设你有一个视图模型:
public class MyViewModel
{
public MyProperty Foo { get; set; }
}
和控制器:
public class HomeController : Controller
{
public ActionResult Index()
{
var model = new MyViewModel
{
Foo = MyProperty.This_is_some_other_text
};
return View(model);
}
}
您可以使用我们刚刚在视图中编写的自定义帮助程序来显示我们可能与丑陋的枚举关联的用户友好文本。嘿,现在你甚至可以使用资源全球化和多种语言:
@model MyViewModel
@Html.DisplayForEnum(x => x.Foo)
答案 2 :(得分:1)
我不知道asp.net - 但是应该是一个非常简单的方法,用另一个char替换一个字符。像:
String.replace( myString, '_',' ' );
答案 3 :(得分:1)
您可以使用替换模式,也称为替换。
您可以在此处找到graet信息: http://msdn.microsoft.com/en-us/library/ewy2t5e0.aspx
祝你好运