So, I'm not sure how to set this up properly.
So, User selects security questions and answers them when creating an account. Now if the user wants to reset password, I want to select 3 out of the 6 questions they answered randomly and present it to the view. How can I do that?
Here's my controller action so far but I'm not what to do with the three questions I randomly selected:
[HttpPost]
[AllowAnonymous]
public ActionResult CheckUserName(GetUserName getUserName)
{
//Checks to see if username is valid
//and if it is valid returns randomized security questions to partial view for user to answer
using (DBContext dbContext = new DBContext())
{
var currentUserId = WebSecurity.GetUserId(getUserName.UserName);
security_questions_answers userSecurityInfo =
dbContext.security_questions_answers.Where(u => u.UserId == currentUserId).SingleOrDefault();
if (userSecurityInfo == null)
{
JsonResult res = Json(new { Success = false, data = "", Message = "No such username exists" });
return res;
}
else
{
SecurityQuestionsViewModel securityQuestionsViewModel = new SecurityQuestionsViewModel();
securityQuestionsViewModel.Question1Id = userSecurityInfo.Question1Id;
securityQuestionsViewModel.Question2Id = userSecurityInfo.Question2Id;
securityQuestionsViewModel.Question3Id = userSecurityInfo.Question3Id;
securityQuestionsViewModel.Question4Id = userSecurityInfo.Question4Id;
securityQuestionsViewModel.Question5Id = userSecurityInfo.Question5Id;
securityQuestionsViewModel.Question6Id = userSecurityInfo.Question6Id;
securityQuestionsViewModel.Answer1 = userSecurityInfo.Answer1;
securityQuestionsViewModel.Answer2 = userSecurityInfo.Answer2;
securityQuestionsViewModel.Answer3 = userSecurityInfo.Answer3;
securityQuestionsViewModel.Answer4 = userSecurityInfo.Answer4;
securityQuestionsViewModel.Answer5 = userSecurityInfo.Answer5;
securityQuestionsViewModel.Answer6 = userSecurityInfo.Answer6;
var listOfSecurityQuestions = new List<int>();
listOfSecurityQuestions.Add(securityQuestionsViewModel.Question1Id);
listOfSecurityQuestions.Add(securityQuestionsViewModel.Question2Id);
listOfSecurityQuestions.Add(securityQuestionsViewModel.Question3Id);
listOfSecurityQuestions.Add(securityQuestionsViewModel.Question4Id);
listOfSecurityQuestions.Add(securityQuestionsViewModel.Question5Id);
listOfSecurityQuestions.Add(securityQuestionsViewModel.Question6Id);
Random random = new Random();
IEnumerable<int> threeRandom = listOfSecurityQuestions.OrderBy(x => random.Next()).Take(3);
//What to do with threeRandom now?
JsonResult res = Json(new { Success = true, data = "", Message = "Username exists. Answer security questions" });
return res;
}
}
}
I randomly grabbed the id of the three security questions. Now, my biggest question is what to do with it in the controller and how will my view know what to display from those ids? How do I pass those ids and display the correct question from those ids?
Here's my viewmodel:
public class SecurityQuestionsViewModel
{
public enum AccountState
{
CREATE, EDIT
}
public AccountState UserAccountState { get; set; }
[DisplayCustomName(Name = "Question1")]
public int Question1Id { get; set; }
[DisplayCustomName(Name = "Question2")]
public int Question2Id { get; set; }
[DisplayCustomName(Name = "Question3")]
public int Question3Id { get; set; }
[DisplayCustomName(Name = "Question4")]
public int Question4Id { get; set; }
[DisplayCustomName(Name = "Question5")]
public int Question5Id { get; set; }
[DisplayCustomName(Name = "Question6")]
public int Question6Id { get; set; }
[DisplayCustomName(Name = "Answer1")]
public string Answer1 { get; set; }
[DisplayCustomName(Name = "Answer2")]
public string Answer2 { get; set; }
[DisplayCustomName(Name = "Answer3")]
public string Answer3 { get; set; }
[DisplayCustomName(Name = "Answer4")]
public string Answer4 { get; set; }
[DisplayCustomName(Name = "Answer5")]
public string Answer5 { get; set; }
[DisplayCustomName(Name = "Answer6")]
public string Answer6 { get; set; }
}
Like in my view, normally I would do something like @if(Model.Question1Id = someNum) but I don't know the number from the controller nor what Question1Id they selected and even if I did, how do I know how to map it back to the right Question number and answer property? Basically, how do I setup the logic in my view for something like this?
Aucun commentaire:
Enregistrer un commentaire