C # MVC: просмотр с опциональной ViewModel (данные не всегда присутствуют / необходимы) - PullRequest
0 голосов
/ 06 июня 2009

Я застрял на проблеме MVC.

У меня есть вид регистрации, доступный по адресу www.example.com/register, что-то вроде этого:

</p> <pre><code><form id="registrationform" method="post"> <fieldset> <label for="emailaddress">Email</label> <input id="emailaddress" name="emailaddress" type="text" /> //more inputs etc. </fieldset> </form>

Теперь я разрешаю людям приглашать других, поэтому я проверяю в методе Register моего контроллера параметр приглашения (www.example.com/register?invite=1234). Если параметр приглашения не пуст, я делаю поиск в своей базе данных, чтобы найти ассоциированного "приглашенного" пользователя. Это все отлично работает.

Теперь проблема: я хочу предварительно заполнить свои входные данные данными из базы данных. У меня уже есть данные, я просто не знаю, как лучше всего поместить их в представление MVC и отключить уже заполненные входы.

ViewModel? Имейте в виду, что мне нужно, чтобы представление регулярно оставалось пустым (я не хочу использовать другие представления, которые бы нарушали DRY).

Спасибо:)

Ответы [ 2 ]

3 голосов
/ 06 июня 2009

Я бы посоветовал вам создать ViewModel и сделать так, чтобы ваш View совершенно не знал о том, что данные вообще не поступают из БД заранее или нет.

Если вы предварительно заполняете данные ... затем заполните вашу ViewModel необходимыми данными (и отключите входные данные, которые предварительно заполняются)

Если вы начинаете с нуля ... тогда заполните вашу ViewModel пустыми данными / данными по умолчанию

В любом случае, все, что делает ваш вид, это отображает форму и заполняет данные по умолчанию для различных текстовых полей и других входных данных на основе переданных в ViewModel.

2 голосов
/ 06 июня 2009

В вашем View Model:

public class RegistrationViewModel
{
    public bool Invited;

    /*
     * Fields for prepopulating inputs
     */
}

По вашему мнению:

<%= Html.TextBox("email", null, Model.Invited ? new { @readonly = "readonly"} : null) %>

или

<%= Html.TextBox("email", null, Model.Invited ? new { @disabled = "disabled"} : null) %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...