Как мне условно отобразить форму в Razor?

#asp.net #asp.net-mvc #razor

#asp.net #asp.net-mvc #razor

Вопрос:

Когда я использую следующий код, я получаю понятное сообщение об ошибке (такое же понятное, как у YSCD), в котором говорится, что мне не следует использовать ‘@’, но когда я его не использую, мое объявление формы отображается как буквальный код Razor, а не как предполагаемые HTML-элементы. Что я делаю не так?

 @if (Model.Step == Trocrates.Web.Models.PasswordResetModel.PasswordResetSteps.StartRequest)
{ 
        @using (Html.BeginForm()) { Html.ValidationSummary(true);
        <fieldset style="border: 0px;">
            <div class="editor-label">
                @Html.LabelFor(model => model.UserName);
            </div>
            <div class="editor-field">
                Html.EditorFor(model => model.UserName) Html.ValidationMessageFor(model => model.UserName)'
                <input type="submit" value="Log In" />
                amp;nbsp;amp;nbsp;@Html.ActionLink("Send", "BeginResetPassword", "Account")
            </div>
        </fieldset>
        }
}
  

Извините, читатели, изначально путаницу вызывал менее заметный символ открытой фигурной скобки в той же строке, что и BeginForm. Когда я закрываю это, все возвращается на свои места.

Комментарии:

1. Извините, это уже там, с моим комментарием о том, что было неправильно. Я думаю, мы оставим это открытым на случай, если другие новички столкнутся с этим?

2. Разве не является основным моментом разделения задач MVC? Я вижу представление, которое имеет логику и управляет тем, какую часть оно будет отображать. Для меня это должно обрабатываться отдельным представлением для каждого «Model.Step», а логика должна выполняться действием контроллера, выбирающим правильное представление для отображения.

3. @Ladislav, я бы согласился на 100%, если бы рассматривал возможность использования большей логики, на мой взгляд, чем просто то, что отображать. Мое представление не принимает бизнес-решений, т. Е. Что произойдет, если актер сделает «это», просто «что может прочитать актер, сделав это?». Я исследовал решения этой проблемы на основе множества представлений, все еще используя одно базовое представление, но, чтобы избежать дополнительных представлений, отличающихся только одним абзацем, разумные решения, похоже, указывают на мои представления, распознающие по крайней мере простые флаги видимости, установленные контроллерами.

Ответ №1:

Вы пытались удалить @ символ в using инструкции? Поскольку вы уже находитесь в режиме кода из-за блока if, @ символ там ничего не означает. Это единственное, что мне кажется неуместным.