使用Razor返回数组中的字符串
本文关键字:字符串 数组 Razor 返回 使用 | 更新日期: 2023-09-27 18:15:10
我从我的模型中取一个字符串[],它在任何给定的时间都有大约25个字符串。
@model PostProcessPartSelectionViewModel
@{
var i = 0;
foreach (var part in Model.PartsAllowedAsSeed)
{
<input type="checkbox" id="[@i]" name="PartsAllowedAsSeed" value="@part" />
<span>@part</span>
<br />
i++;
}
}
我在Razor中设置了一个@foreach循环,为每个字符串显示一个复选框和标签,但是当我调试时,@part呈现给System.Object[]。有25个"系统"复选框。对象[]"标签。
最终,我将想要返回任何检查字符串返回到模型,但现在我只想知道如何让Razor呈现实际的字符串值。
不要在razor中使用foreach
,使用for
循环,这样你可以直接绑定到你的模型:
@for (int i = 0; i < @Model.PartsAllowedAsSeed.Length; i++)
{
<input type="checkbox" id="[@i]" name="PartsAllowedAsSeed" />
<span> @Model.PartsAllowedAsSeed[i] </span>
<br />
}
对于您的System.Object[]
,您可以做string.Join(", ", @Model.PartsAllowedAsSeed[i])
或其他类似的来满足您的需要
我的情况非常具体,所以我认为这并不适用于任何人。我有一个Object[],里面有很多对象,我想用Razor将每个子对象显示为字符串。我使用了一种技巧将Object[]强制转换为一个列表,然后在每个列表条目后面加上括号,并将每个字符串报告给Razor。现在,我不需要直接绑定到模型,所以我选择只使用foreach。
剃刀代码:
@{
var i = 0;
@foreach (var item in Model.PartsAllowedAsSeed)
{
<input type="checkbox" id="@i" name="PartsAllowedAsSeed" />
<span>@Html.ConvertToArray(item)</span>
<br />
i++;
}
}
助手类:
public static MvcHtmlString ConvertToArray(this HtmlHelper htmlHelper, object source)
{
var src = source as IEnumerable;
if (src == null) return MvcHtmlString.Create(string.Empty);
var sourceAsList = src.Cast<Object>().ToList();
var output = new StringBuilder();
output.Append("[");
for (var index = 0; index < sourceAsList.Count; index++)
{
var item = sourceAsList[index];
output.Append(item);
if (index != (sourceAsList.Count - 1)) output.Append(", ");
}
output.Append("]");
return MvcHtmlString.Create(output.ToString());
}