全部,將模型傳遞給另一個視圖
我是MVC的新手,因此在學習新項目時學習了它。我有一些我想實現的簡單功能,但不知道我是否以正確的方式進行操作 - 目前的方法會導致運行時錯誤 - 以下是對問題的描述。
我正在嘗試創建一些密碼重置功能。要重置密碼,我要讓用戶在一個視圖中輸入他們的用戶名和電子郵件。然後在第二個視圖中,我將顯示他們的密碼重置問題,並讓他們輸入密碼重置答案。第二個視圖也會顯示他們的用戶名,所以我需要將輸入的用戶名從視圖1傳遞到視圖2。我有以下兩種模式至今:
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; }
}
注意:第二個模型還具有存儲步驟一個模型的屬性,這是爲了讓在第二視圖,我可以訪問並顯示用戶的用戶名像「Hi {用戶名}」這樣的消息,要重置您的密碼,請回答您的密碼重置問題。「我爲上述模型創建了強類型視圖,並執行以下操作。
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強類型的視圖 - 這導致以下運行時錯誤:
The model item passed into the dictionary is of type 'MvcCrossPageModel.Models.ResetPasswordModelStepTwo', but this dictionary requires a model item of type 'MvcCrossPageModel.Models.ResetPasswordModelStepOne'.
有人可以解釋我在做什麼錯嗎?用一種模式在一種視圖中實現這一點有更好的方法嗎?我是否通過創建「第一步」和「第二步」模型來正確執行此操作?理想情況下,我想有一個單一視圖,用戶輸入自己的用戶名和電子郵件 - 那麼同樣的看法返回提示他們輸入密碼提示問題/
什麼視圖模型的PasswordResetSteptTwo看法? – MikeSW 2012-03-31 09:25:06
第二步視圖的模型是ResetPasswordModelStepTwo。我收到了另一個人在這裏提出的意見,建議在PasswordResetStepOne POST中使用RedirectToAction,並使用TempData將用戶名和電子郵件從第一步傳遞到第二步。我已經這樣做了,它工作的很好 - 儘管我仍然不確定這個簡單的功能是否有兩個獨立的視圖是合理的,但是在MVC中只有一個視圖無法實現? – DotNetDeveloper 2012-03-31 09:44:47