Все,
Я новичок в MVC и поэтому изучаю его по мере работы над новым проектом.У меня есть несколько простых функций, которых я хотел бы достичь, но не знаю, правильно ли я это делаю - текущий подход приводит к ошибке времени выполнения - описание проблемы приведено ниже.
I 'Я пытаюсь создать некоторые функции сброса пароля.Чтобы сбросить пароль, я собираюсь заставить пользователя ввести свое имя пользователя и адрес электронной почты в одном представлении.Затем, во втором представлении, я собираюсь отобразить их вопрос сброса пароля и заставить их ввести свой ответ сброса пароля.Во втором представлении также будет отображаться имя пользователя, поэтому мне нужно передать введенное имя пользователя из первого представления во второе.На данный момент у меня есть следующие две модели:
public class ResetPasswordModelStepOne
{
[Required]
[Display(Name = "Username")]
public string Username { get; set; }
[Required]
[Display(Name = "Email")]
[DataType(DataType.EmailAddress)]
public string Email { get; set; }
}
public class ResetPasswordModelStepTwo
{
public ResetPasswordModelStepOne StepOneModel { get; set; }
[Display(Name = "Question")]
public string ResetQuestion { get; set; }
[Required]
[Display(Name = "Answer")]
public string ResetAnswer { get; set; }
}
Обратите внимание, что вторая модель также имеет свойство для хранения модели первого шага, так что на втором экране я могу получить доступ и отобразить пользователейимя пользователя в сообщении типа «Привет {Имя пользователя}, чтобы сбросить пароль, пожалуйста, ответьте на вопрос сброса пароля».Я создал строго типизированные представления для обеих вышеупомянутых моделей и выполняю следующие действия:
public ActionResult PasswordResetStepOne()
{
return View();
}
[HttpPost]
public ActionResult PasswordResetStepOne(ResetPasswordModelStepOne stepOneModel)
{
//Imagine i'm validating that the user exists here and then retrieving
//their secret question from a repository
var userSecretQuestion = "What is your favourite color?";
return PasswordResetStepTwo(new ResetPasswordModelStepTwo { StepOneModel = stepOneModel, ResetQuestion = userSecretQuestion });
}
public ActionResult PasswordResetStepTwo(ResetPasswordModelStepTwo stepTwoModel)
{
return View(stepTwoModel);
}
Проблема, с которой я сталкиваюсь при таком подходе, заключается в том, что когда пользователь вводит свое имя пользователя и адрес электронной почты в представлении первого шагаЗатем я вызываю действие «PasswordResetStepTwo», которое возвращает строго типизированное представление для ResetPasswordModelStepTwo - это приводит к следующей ошибке времени выполнения:
Элемент модели, переданный в словарь, имеет тип 'MvcCrossPageModel.Models.ResetPasswordModelStepTwo ', но для этого словаря требуется элемент модели типа' MvcCrossPageModel.Models.ResetPasswordModelStepOne '.
Может кто-нибудь объяснить, что я здесь делаю неправильно?Есть ли лучший способ добиться этого в одном представлении с одной моделью?Правильно ли я делаю это, создавая модели «первый шаг» и «второй шаг»?В идеале я хотел бы иметь одно представление: пользователь вводит свое имя пользователя и адрес электронной почты - затем возвращается то же представление, запрашивающее у них секретный вопрос /