Razor Core 2输出变量位于html标记内

时间:2018-09-26 19:28:55

标签: asp.net-mvc razor asp.net-core-2.1

我似乎无法在标记内输出var。我曾经像下面的MVC2剃须刀中的代码那样做。但是现在,标签看起来像某种保留标签。

<select class="form-control" id="CompanyId" name="CompanyId">
    @{ 
        foreach (var item in Model.Companies)
        {
            var selected = "";

            if (item.CompanyId == Model.CompanyId)
            {
                selected = "selected";
            }

            <option value="@item.CompanyId" @selected>@item.Name</option>
        }
    }
</select>

2 个答案:

答案 0 :(得分:0)

尝试以下类似方法:

<select class="form-control" id="CompanyId" name="CompanyId">
    @{ 
        foreach (var item in Model.Companies)
        {
            if (item.CompanyId == Model.CompanyId)
            {
                <option value="@item.CompanyId" selected>@item.Name</option>
            }
            else
            {
                <option value="@item.CompanyId">@item.Name</option>
            }
        }
    }
</select>

答案 1 :(得分:0)

这不是写剃刀的正确方法,您将其视为HTML文本。在属性内使用布尔值,当它评估为true时将很好地使用该属性,如果为false(或null),则根本不会呈现该属性。

<select class="form-control" id="CompanyId" name="CompanyId">
    @foreach (var item in Model.Companies)
    {
        <option value="@item.CompanyId" selected="@(item.CompanyId == Model.CompanyId)">@item.Name</option>
    }
</select>

但是您应该改用标签助手和模型绑定,这将使您的代码更易于维护。

查看

@model HomeViewModel

<select class="form-control" asp-for="CompanyId" asp-items="Model.Companies"></select>

模型 (假设选择选项是静态的,否则将在控制器内部填充)

public class HomeViewModel
{
    public string CompanyId { get; set; }

    public readonly List<SelectListItem> Companies = new List<SelectListItem>()
    {
        new SelectListItem("Microsoft", "Microsoft"),
        new SelectListItem { Value = "Yahoo", Text = "Yahoo" },
        new SelectListItem { Value = "Google", Text = "Google", Disabled = true, Selected = false }
    };
}

控制器

public IActionResult Index()
{
    HomeViewModel model = new HomeViewModel
    {
        CompanyId = "Yahoo"
    };
    return View(model);
}