HtmlHelper创建一个最多包含2个列表元素的无序列表

时间:2014-07-16 04:50:54

标签: c# .net asp.net-mvc razor

我想制作一个HtmlHelper方法来生成一个带有两个li标签的无序列表的Html。进来的值将是两个对象的IEnumerable,每个对象都希望每个对象的字符串在li标签中可见。

   <div id="pages">
    <ul>
        <li>somePage1.jpg</li>  <--One of the two objects in the enumerable
        <li>somePage.jpg</li>   <--Second of the two objects in the enumerable
    </ul>
  </div>

对于传入的每个模型对象,将生成以前的代码。

提前致谢。我希望我能很好地描述我的情况。这是我第一次使用这种技术。

1 个答案:

答案 0 :(得分:2)

作为一个例子,这样的事情(从我的一个帮助者快速和肮脏的适应,但没有测试你的情况)。我建议你做一些研究 - 网上有很多例子。

public static MvcHtmlString TaskTableFor<TModel, TValue>(this HtmlHelper<TModel> helper, 
  Expression<Func<TModel, TValue>> expression)
{
  // Get the model metadata
  ModelMetadata metaData = ModelMetadata
    .FromLambdaExpression(expression, helper.ViewData);
  IEnumerable<string> items= metaData.Model as IEnumerable<string>;
  if (items == null || items.Count() != 2)
  {
    throw new ArgumentException("Invalid collection");
  }
  StringBuilder html = new StringBuilder();
  TagBuilder first = new TagBuilder("li");
  first.InnerHtml = items.First();
  html.Append(first.ToString());
  TagBuilder second = new TagBuilder("li");
  second.InnerHtml = items.Last();
  html.Append(second.ToString());
  TagBuilder list = new TagBuilder("ul");
  list.InnerHtml = html.ToString();
  return MvcHtmlString.Create(list.ToString());
}