В моем приложении ASP.NET MVC2 у меня есть класс ViewModel с именем UserCreateViewModel.
В этом классе есть ряд свойств, которые напрямую отображаются в класс 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)
возвращаемая модель представления не содержит значений для OpenIdClaimedIdentifier
и OpenIdFriendlyIdentifier
.
Я исследовал использование атрибута [HiddenInput]
, но мне не удалось это сделать. Я также попытался использовать скрытый тег <input/>
в форме, который работает, но это кажется немного неуклюжим.
Есть ли лучший способ сделать это? или используется скрытый <input>
единственный способ?
РЕДАКТИРОВАТЬ: Для уточнения логического потока:
- Пользователь пытается войти под своим OpenId.
- DotNetOpenAuth выполняет аутентификацию и в случае успеха возвращает
OpenIdClaimedIdentifier
и OpenIdFriendlyIdentifier
.
- Я проверяю базу данных, чтобы проверить, есть ли уже пользователь с таким идентификатором.
- Если пользователя еще нет, создайте временный
UserCreateViewModel
с обоими установленными полями OpenId. Это хранится в TempData
.
- Перенаправить на UserController Создать действие и отобразить представление Создать с этим частично завершенным
UserCreateViewModel
объектом.
- Этот бит является проблемой Затем пользователь заполняет другие данные (DisplayName и т. Д.) И публикует полученный
UserCreateViewModel
.
Проблема в том, что между шагами 5 и 6 параметры OpenId теряются, если они не связаны. Я не хочу показывать пользователю OpenIdClaimedIdentifier
или OpenIdFriendlyIdentifier
во время создания формы, но если я удаляю данные, их привязка теряется в сообщении.
Надеюсь, это немного прояснит вопрос