M4N*_*M4N 68 html-helper mvchtmlstring asp.net-mvc-2
我对如何连接MvcHtmlString实例有一些疑问,因为在MSDN中找到了这些信息:
MvcHtmlString类表示不应再次编码的HTML编码字符串
使用这样的代码时,我冒险将字符串HTML编码两次:
var label = Html.LabelFor(model => model.Email);
var textbox = Html.TextBoxFor(model => model.Email);
var validation = Html.ValidationMessageFor(model => model.Email);
var result = MvcHtmlString.Create(
label.ToString() + textbox.ToString() + validation.ToString());
Run Code Online (Sandbox Code Playgroud)
(注意:这应该进入HtmlHelper扩展方法以减少视图中的代码重复).
Rya*_*yan 57
太糟糕的C#不会让我们覆盖+运算符!如何使用扩展方法呢?
public static MvcHtmlString Concat(this MvcHtmlString first, params MvcHtmlString[] strings)
{
return MvcHtmlString.Create(first.ToString() + string.Concat(strings.Select(s => s.ToString())));
}
Run Code Online (Sandbox Code Playgroud)
这可能是优化的,但你可以运行它.证明这不会通过单元测试对字符串进行双重编码应该是相当简单的.
使用范例:
label.Concat(textbox, validation)
Run Code Online (Sandbox Code Playgroud)
现在我的博客是一个无耻的插件:使用TagBuilder或HtmlTags来清理你的HTML
mar*_*ind 27
你的代码是正确的.
来自MSDN的代码片段意味着编码视图引擎(例如.NET 4中使用的Aspx视图引擎<%: %>或MVC 3中的Razor视图引擎)不应重新编码对象的字符串值.
例如:
string s = "<tag>";
var hs = MvcHtmlString.Create(s);
<%: s %> -- outputs "<tag>"
<%: hs %> -- outputs "<tag>"
Run Code Online (Sandbox Code Playgroud)
mig*_*elv 20
我采用了这种方法:
private static MvcHtmlString Concat(params MvcHtmlString[] items)
{
var sb = new StringBuilder();
foreach (var item in items.Where(i => i != null))
sb.Append(item.ToHtmlString());
return MvcHtmlString.Create(sb.ToString());
}
Run Code Online (Sandbox Code Playgroud)
它只是一个实用工具方法,我在类中使用HtmlHelper的扩展方法.
| 归档时间: |
|
| 查看次数: |
27173 次 |
| 最近记录: |