MVC DisplayTemplate不显示C#字符串变量

时间:2017-06-07 13:41:25

标签: c# asp.net-mvc razor

我的主模型名为Project,有两个类型为Address的变量,它是我定义的类。因为我想根据定义的字段动态格式化地址。我的DisplayTemplate的代码是:

@model ProjectClearanceApp.Models.Project.Address

@{
    string addr = "";
    if (!String.IsNullOrEmpty(Model.Line1))
    {
        addr += (Model.Line1 + "\n");
    }
    if (!String.IsNullOrEmpty(Model.Line2))
    {
        addr += (Model.Line2 + "\n");
    }
    if (!String.IsNullOrEmpty(Model.City))
    {
        addr += Model.City;
    }
    if (!String.IsNullOrEmpty(Model.State))
    {
        addr += (", " + Model.State);
    }
    if (Model.ZipCode != 0)
    {
        addr += (", " + Model.ZipCode);
    }
    Html.Raw(addr);
}

我使用字符串变量并附加到它的原因是因为我最初将我的显示模板定义为:

@model ProjectClearanceApp.Models.Project.Address

@if (!String.IsNullOrEmpty(Model.Line1))
{
    @Html.DisplayFor(model => model.Line1)
    <br />
}
@if (!String.IsNullOrEmpty(Model.Line2))
{
    @Html.DisplayFor(model => model.Line2)
    <br />
}
@if (!String.IsNullOrEmpty(Model.City))
{
    @Html.DisplayFor(model => model.City)
}
@if (!String.IsNullOrEmpty(Model.State))
{
    @:, @Html.DisplayFor(model => model.State)
}
@if (Model.ZipCode != 0)
{
    @:, @Html.DisplayFor(model => model.ZipCode)
}

但是因为最后三个DisplayFor在不同的行上(至少我的想法,我可能是错的),地址会显示为FakeCity , FakeState , 12345,每个逗号前都有一个空格(如果某人有快速解决方法,这将解决我的所有问题。)

然而,当我使用字符串时,它根本不会在我的页面上显示变量。我在最后一行(Html.Raw(addr);)上设置了一个断点,addr在我的代码处理地址时达到了正确的值,但当它呈现页面本身时,没有任何显示。我已经尝试了Html.Display(addr);Html.DisplayText(addr);,但仍然没有运气。

1 个答案:

答案 0 :(得分:1)

您需要将@添加到Html.Raw()。如果没有它,你只需执行该方法,不返回其值并输出它生成的结果。

@model ProjectClearanceApp.Models.Project.Address
@{
    string addr = "";
    ....
    @Html.Raw(addr); // add leading `@`
}