В моем приложении ASP.NET MVC2 у меня есть класс ViewModel с именем UserCreateViewModel.Недействительные свойства ViewModel в виде редактирования
В этом классе существует ряд свойств, которые непосредственно сопоставляются с классом LINQ to SQL, называемым User. Я использую AutoMapper для выполнения этого сопоставления, и он отлично работает.
В моем действии пользователя UserController я получаю частично заполненный UserCreateViewModel, который содержит информацию об аутентификации OpenId.
это определение UserCreateViewModel:
public class UserCreateViewModel
{
public string OpenIdClaimedIdentifier { get; set; }
public string OpenIdFriendlyIdentifier { get; set; }
public string Displayname { get; set; }
public string Email { get; set; }
public string PhoneNumber { get; set; }
}
Создавание зрения, я не делаю никакого желания для OpenIdClaimedIdentifier
или OpenIdFriendlyIdentifier
редактируемой.
Я использовал сильно типизированное представление создания (используя встроенное автоматическое создание), но это дает мне редактируемые текстовые поля для этих двух свойств. Если я полностью удалить конкретный HTML, когда форма создания является возвращение (и возвращается непосредственно в UserCreateViewModel):
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create(UserCreateViewModel viewModel, string ReturnUrl)
возвращаемый ViewModel не содержит значения для OpenIdClaimedIdentifier
и OpenIdFriendlyIdentifier
.
Я исследовал использование атрибута [HiddenInput]
, но я не мог сделать эту работу. Я также попытался использовать скрытый тег <input/>
в форме, которая работает, но это кажется немного неуклюжим.
Есть ли лучший способ сделать это? или использует скрытый <input>
единственный способ?
EDIT: Чтобы уточнить логическую схему:
- Пользователь пытается войти в систему с их OpenId.
- DotNetOpenAuth выполняет аутентификацию и в случае успеха возвращает
OpenIdClaimedIdentifier
иOpenIdFriendlyIdentifier
. - Я делаю проверку базы данных, чтобы узнать, есть ли у пользователя этот идентификатор.
- Если пользователя уже нет, создайте временный
UserCreateViewModel
с обоими установленными полями OpenId. Это сохраняется вTempData
. - Перенаправление на UserController. Создайте действие и покажите представление Create с этим частично завершенным объектом
UserCreateViewModel
. - Этот бит является проблемой Затем пользователь завершает другие данные (DisplayName и т. Д.) И публикует итоговые
UserCreateViewModel
.
Проблема заключается в том, что между этапами 5 и 6 параметры OpenId теряются, если они не связаны. Я не хочу показывать пользователю OpenIdClaimedIdentifier
или OpenIdFriendlyIdentifier
во время создания формы, но если я удалю данные, их привязка будет потеряна в сообщении.
Я надеюсь, что это проясняет вопрос немного
Ваш в создании, не так ли, чтобы иметь нулевое значение, если они не установлены? Что хотите, пустая строка? –
Это не совсем то, что я имел в виду, я уточнил вопрос. –
Есть ли причина, по которой вы не хотите использовать скрытое поле? Это может помочь нам лучше ответить на ваш вопрос. Я обновил свой ответ после редактирования. –