【问题标题】:HtmlHelper to create a unordered list with max of 2 list elementsHtmlHelper 创建一个最多包含 2 个列表元素的无序列表
【发布时间】:2014-07-16 04:50:53
【问题描述】:

我想创建一个 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>

对于传入的每个模型对象,都会生成前面的代码。

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

【问题讨论】:

  • 没有人会为你写。尝试并研究它,如果遇到困难就回来。
  • 我不是在找人写,我是在寻求帮助。

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


【解决方案1】:

例如,类似这样的事情(来自我的一位助手的快速而肮脏的适应,但未针对您的情况进行测试)。我建议你做一些研究——网上有很多例子。

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());
}

【讨论】:

  • 完美!正是我想要的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-03-02
  • 2021-05-07
  • 2020-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-03
相关资源
最近更新 更多