【发布时间】:2012-08-17 23:35:41
【问题描述】:
我可以在 MVC 3 中创建这样的代码行吗
<%=Html.CustomHtmlTag(r => r.Add("One"), r.Add("Two")...).Render()%>
我尝试查找示例,但所有代码都是针对(r => r.Add("One"))
非常感谢您的帮助。
【问题讨论】:
标签: c# asp.net asp.net-mvc-3 lambda html-helper
我可以在 MVC 3 中创建这样的代码行吗
<%=Html.CustomHtmlTag(r => r.Add("One"), r.Add("Two")...).Render()%>
我尝试查找示例,但所有代码都是针对(r => r.Add("One"))
非常感谢您的帮助。
【问题讨论】:
标签: c# asp.net asp.net-mvc-3 lambda html-helper
你可以用 lambdas 编写完整的函数,只需加上大括号。
r =>
{
r.Add("One");
r.Add("Two");
}
【讨论】:
@VoidStar 提供的答案是正确的,如果你觉得很糟糕,这里有一个更详细的例子。
MVC 代码
@Html.CustomHtmlTag(Model, x => {
Model.Add("One");
Model.Add("Two");
Model.Add("Three");
Model.Add("Four");
}).Render()
型号
public class MyModel
{
private readonly IList<string> _values = new List<string>();
public void Add(string value)
{
_values.Add(value);
}
public string ValuesToString()
{
return string.Join(",", _values);
}
}
HTML 帮助程序
public static class MyMvcHelpers
{
public static IMyClass CustomHtmlTag(this HtmlHelper helper, MyModel viewModel, Action<MyModel> action)
{
action.Invoke(viewModel);
var expressionResult = viewModel.ValuesToString();
return new MyClass(expressionResult);
}
}
渲染类
public interface IMyClass
{
MvcHtmlString Render();
}
public class MyClass : IMyClass
{
private readonly string _value;
public MyClass(string value)
{
_value = value;
}
public MvcHtmlString Render()
{
return new MvcHtmlString(string.Concat("<h1>", _value, "</h1>"));
}
}
结果
<h1>One,Two,Thee,Four</h1>
【讨论】: