gpt4 book ai didi

asp.net-mvc - 如何在我的 ASP.NET MVC 代码中避免标签汤?

转载 作者:行者123 更新时间:2023-12-02 07:15:20 24 4
gpt4 key购买 nike

我有一个使用 Entity Framework 的新 MVC 项目。我现在根据某些条件因素吐出消息(这是公告板样式部分),表输出中的行必须具有不同的类样式。
从 Controller 传递到页面的模型是实体模型(称为消息,包含与数据库相同的字段)
为了获得行样式,我执行了以下操作:

<%
int i = 0;
foreach (var message in ViewData.Model.MessageList)
{
string className = "rowEven";

if (i % 2 == 0) { className = "rowOdd"; }
if (message.Deleted) { className = "deleted"; }
if (message.AuthorisedBy == null) { className = "notAuth"; }
if (message.Deleted) { className = "deleted"; }

%>
<tr class="<%=className%>">
<td><%= Html.CheckBox("mc1")%></td>
<td>
<%= Html.ActionLink(message.Title, "Details", new { id = message.MessageID })%>
</td>
<td>User Name Here</td>
<td><%= Html.Encode(message.PublishDateTime.ToString())%></td>
</tr>
<%
i++;
}
%>
哪个很丑陋,必须有更好的方法来做到这一点,有什么建议吗?

最佳答案

这绝对是表示逻辑, View 是它所属的地方。但是,您最好将该 CSS 类选择代码移至 View 助手,它将接受 MessageMessageList :

public static string GetMessageCssClassName(this /* Don't remember :) */, Message message, MessageList messages)
{
var cssClassName = messages.IndexOf(message) % 2 == 0 ?
"rowOdd" : "rowEven";

if(message.Deleted) cssClassName = "deleted";
if(message.AuthorisedBy == null) cssClassName = "notAuth";
if(message.Deleted) cssClassName = "deleted";
}

现在您可以在 <tr class="Html.GetMessageCssClassName(...)"> 中调用它, 摆脱 i柜台:
<% foreach (var message in ViewData.Model.MessageList) { %>
<tr class="<%= Html.GetMessageCssClassName(message, ViewData.Model.MessageList) %>">
<td><%= Html.CheckBox("mc1")%></td>
<td>
<! -- Remaining stuff here -->
<% } %>

关于asp.net-mvc - 如何在我的 ASP.NET MVC 代码中避免标签汤?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1524655/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com