我有以下代码:
string init = "yes";
string html = "";
foreach (var item in v.Details) {
if (item.Substring(0, 1) != " ")
{
if (init != "yes")
{
html += "</ul>";
}
html += "<p>" + item + "</p><ul>";
}
else
{
html += "<li>" + item.Substring(1) + "</li>";
}
}
代码在我的MVC控制器中,它创建了一个名为html的字符串。事情是我不认为它应该在控制器中。我试图把它放到视图中,结果发现了一个看似无效的巨大混乱。似乎我不太擅长在剃刀视图中编码C.我刚看到很多语法类型的错误,以及在什么样的C和什么样的HTML之间产生混淆。
任何人都可以建议我如何在视图中使用此代码。这就是我过去所拥有的:
<ul>
@foreach (var item in Model.Details)
{
<li>@item</li>
}
</ul>
这有效,但正如您所见,我现在需要更多处理。把它从视图中拿出来会更好吗,如果是这样的话,我怎么能这样做呢。我真的希望提供一个视图解决方案,但我对于放置@和#以及放置括号的位置感到困惑。
任何编写C内部或Razor的专家都在那里?
答案 0 :(得分:4)
代码在我的MVC控制器中,它创建了一个名为html的字符串。 事情是我不认为它应该在控制器中
你是对的。它不应该在视图中,也不应该由于它会造成的绝对混乱。我认为这段代码更适合自定义HTML帮助器:
public static class HtmlExtensions
{
public static IHtmlString FormatDetails(this HtmlHelper htmlHelper, IEnumerable<string> details)
{
var init = "yes";
var html = new StringBuilder();
foreach (var item in details)
{
if (item.Substring(0, 1) != " ")
{
if (init != "yes")
{
html.Append("</ul>");
}
html.AppendFormat("<p>{0}</p><ul>", htmlHelper.Encode(item));
}
else
{
html.AppendFormat("<li>{0}</li>", htmlHelper.Encode(item.Substring(1)));
}
}
return MvcHtmlString.Create(html.ToString());
}
}
您将在视图中调用:
@Html.FormatDetails(Model.Details)
备注:init
变量似乎有问题。您最初将其值设置为yes
,但以后不会对其进行修改。