Что является эквивалентом ASP.NET MVC для условного отображения метки? - PullRequest
1 голос
/ 09 июля 2009

В настоящее время я портирую приложение ASP.NET WebForms на ASP.NET MVC.

На одной из страниц имеется элемент управления меткой ASP.NET, который отображается условно на основе переменной в заднем коде. Итак, что-то с эффектом

<asp:Label runat="server" Visible="<%# ShowLabel%>">
...
</asp:Label>

Где ShowLabel - логическое значение в коде. Содержимое метки генерируется во время выполнения и каждый раз будет сильно отличаться.

Есть лучшие способы сделать это даже в ASP.NET, но как лучше всего это сделать в ASP.NET MVC? Как вы вообще должны визуализировать динамический текст в ASP.NET MVC способом, аналогичным тому, как работал объект метки ASP.NET?

Ответы [ 3 ]

4 голосов
/ 09 июля 2009

Я верю в принцип Thunderdome о наличии одного класса ViewModel для каждого представления (если это не очень простое представление).

Таким образом, у меня будет класс ViewModel, подобный следующему:

public class IndexViewModel   
{
    public bool labelIsVisible { get; set; }
    public String labelText { get; set; }

    public IndexViewModel(bool labelIsVisible, String labelText)
    {
        this.labelIsVisible = labelIsVisible;
        this.labelText = labelText;
    }
}

В вашем контроллере сделайте что-то вроде

public ActionResult Index()
{
    // Set label to be visible in the ViewModel instance
    IndexViewModel viewData = new IndexViewData(true, "Simucal rocks!");
    return View(viewData);
}

Где Index - строго типизированное представление типа IndexViewModel.

Тогда, по вашему мнению, просто сделайте что-то вроде:

<% if (Model.labelIsVisible) { %>
 <%= Model.labelText %>
<% } %>
1 голос
/ 09 июля 2009

Основная идея в MVC - НЕ передавать строки, которые вы хотите отобразить; Вы должны передать соответствующие объекты в ваш View, и View, в свою очередь, примет решение, отображать ли эту метку или нет (и это использует простой if, как в примере Simucal).

Итак, вместо того, чтобы делать

if (Model.labelIsVisible) {

Можно было бы сделать

if (Model.Comments == 0) {

Например, если ярлык будет отображать приглашение для пользователя прокомментировать статью.

0 голосов
/ 29 марта 2012

Возьмите свой элемент и установите функцию hide () следующим образом:

<div id="label">
    @Html.Label("myLabel", "text")
</div>


$("#label").hide();`
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...