Asp.net mvc MVC XHTML遵从性问题

Asp.net mvc MVC XHTML遵从性问题,asp.net-mvc,Asp.net Mvc,我有一个由我的数据层填充的模型,然后我有一个局部视图,它正在渲染该模型的一个实例 <li class="<%= td.Active ? "youarehere" : string.Empty %> <%= i == ViewData.Model.Count() - 1 ? "last" : string.Empty %>"> 问题是class=是无效的XHTML,我需要更复杂的逻辑来输出class属性。使用ASP.NET MVC进行此操作的正确方法是什么。逻

我有一个由我的数据层填充的模型,然后我有一个局部视图,它正在渲染该模型的一个实例

<li class="<%= td.Active ? "youarehere" : string.Empty %> <%= i == ViewData.Model.Count() - 1 ? "last" : string.Empty %>">
问题是class=是无效的XHTML,我需要更复杂的逻辑来输出class属性。使用ASP.NET MVC进行此操作的正确方法是什么。逻辑应该存在于视图还是模型中


我刚开始使用MVC,我想我仍然在努力到底在哪里画线,我把逻辑放在哪里,每个层包含多少逻辑是可以接受的。

我可能会实现代码,在助手方法中呈现该类属性。一个特定于此视图,或者一个稍微通用一点。这样,视图中的代码就更少了,它可以处理在没有任何东西可渲染的情况下是否渲染class属性。

我可能会实现在助手方法中渲染该class属性的代码。一个特定于此视图,或者一个稍微通用一点。这样,视图中的代码就更少了,它可以处理在没有任何可渲染的情况下是否渲染class属性。

好的,根据Phil的输入,这就是我所做的。它起作用了。如果有任何人有任何有用的反馈,请添加评论

我创建了一个名为GenerateAttribute的HtmlHelper扩展方法

public static string GenerateAttribute(this HtmlHelper hh,
                                       string name,
                                       Func<string> valueFunc)
{ 
    string value = valueFunc().Trim();
    if (!string.IsNullOrEmpty(value))
        return string.Format("{0}=\"{1}\"", name, value);
    return string.Empty;
}
在我的视图中,我调用Html.GenerateAttribute,将生成值的lambda表达式传递给它。如果值不是string.Empty,则GenerateAttribute方法将返回完整的属性name=val

<li <%= Html.GenerateAttribute("class", () => string.Format("{0} {1}", td.Active ? "youarehere" : string.Empty, i == ViewData.Model.Count() - 1 ? "last" : string.Empty)) %>>

好的,根据菲尔的输入,这就是我所做的。它起作用了。如果有任何人有任何有用的反馈,请添加评论

我创建了一个名为GenerateAttribute的HtmlHelper扩展方法

public static string GenerateAttribute(this HtmlHelper hh,
                                       string name,
                                       Func<string> valueFunc)
{ 
    string value = valueFunc().Trim();
    if (!string.IsNullOrEmpty(value))
        return string.Format("{0}=\"{1}\"", name, value);
    return string.Empty;
}
在我的视图中,我调用Html.GenerateAttribute,将生成值的lambda表达式传递给它。如果值不是string.Empty,则GenerateAttribute方法将返回完整的属性name=val

<li <%= Html.GenerateAttribute("class", () => string.Format("{0} {1}", td.Active ? "youarehere" : string.Empty, i == ViewData.Model.Count() - 1 ? "last" : string.Empty)) %>>

这段代码的另一件事是将计算工作移动到控制器或代码后面的某个位置

i、 e.更换

<li <%= Html.GenerateAttribute("class", 
   () => string.Format("{0} {1}", td.Active 
     ? "youarehere" : string.Empty, 
   i == ViewData.Model.Count() - 1 
     ? "last" : string.Empty)) %>>
有点像

<%= Html.ListItem( ViewData.Model.Value, 
       GetItemCssClass(i, ViewData.Model.Count()) ) %>

GetItemCssClass可能在代码隐藏中。

此代码的另一项功能是将计算工作移动到控制器或代码隐藏中的某个位置

i、 e.更换

<li <%= Html.GenerateAttribute("class", 
   () => string.Format("{0} {1}", td.Active 
     ? "youarehere" : string.Empty, 
   i == ViewData.Model.Count() - 1 
     ? "last" : string.Empty)) %>>
有点像

<%= Html.ListItem( ViewData.Model.Value, 
       GetItemCssClass(i, ViewData.Model.Count()) ) %>

GetItemCssClass可能在代码隐藏中。

Oglester,我找不到Html.ListItem方法。这是MVC的一部分还是您编写的扩展方法?您可以将自定义Html帮助程序扩展方法设置为公共静态字符串帮助程序Methis System.Web.MVC.HtmlHelper帮助程序,params{return string.format,param}解释betterOglester,我找不到Html.ListItem方法。这是MVC的一部分还是您编写的扩展方法?您可以将自定义Html帮助程序扩展方法设置为公共静态字符串帮助程序Methis System.Web.MVC.HtmlHelper帮助程序,params{return string.format,param}解释得更好