The bool value always is always taken as false but its true in database? MVC - asp.net-mvc

I have defined user(admin) type as 'bit' data type in my database. So if value is true it should go to a specific page otherwise it should return the same view. But whenever I pass object (adminObj) with different values the if statement only returns 'false' from database. Can somebody help where is the problem ?
here is my logic
[HttpPost]
public ActionResult Login(tbl_Admin adminObj)
{
studentDBEntities db = new studentDBEntities();
var adminvar = db.tbl_Admin.Where(x => x.Email == adminObj.Email && x.Password == adminObj.Password).FirstOrDefault();
var type=adminObj.Type;
if (adminvar != null)
{
/*var isGlobal=*/
if (adminObj.Type == true)
{
return RedirectToAction("ListAdmin");
}
else
{
return View();
}
}
else
{
return View();
}
}
Values in Database-Table:
When Type=1

Alright, I found the logical error here. I was calling the login object instead of the object which was actually storing the fetched data. So I should call var type=adminvar.Type; instead of var type=adminObj.Type;
So The Corrected logic will be
[HttpPost]
public ActionResult Login(tbl_Admin adminObj)
{
studentDBEntities db = new studentDBEntities();
var adminvar = db.tbl_Admin.Where(x => x.Email == adminObj.Email && x.Password == adminObj.Password).FirstOrDefault();
if (adminvar != null)
{
if (adminvar.Type== true)
{
return RedirectToAction("ListAdmin");
}
else
{
return View();
}
}
else
{
return View();
}
}

Related

REST API check if email exists

I would like to check if the user exists with the email in the database. I want to do this in the API, it should simply return true or false. This is what i get; when the user exists it returns true if the user does not exist in DB it returns a 500 internal server error. How could I solve this? Thanks in advance
public IHttpActionResult GetUserEmail(string Email)
{
var User = (db.Users
.Where(p => p.Email == Email)
.First());
if (User == null)
{
return Ok(false);
}
else
{
return Ok(true);
}
}
The answer has been given above, I am leaving an example code block just as an example. :)
var User = db.Users.FirstOrDefault(p => p.Email == Email);
if (User == null)
{
return Ok(false);
}
else
{
return Ok(true);
}
// or
var User = db.Users.Any(p => p.Email == Email);
if (!User)
{
return Ok(false);
}
else
{
return Ok(true);
}
code block with the changes as mentioned by #Dawood Awan in the comments –
public IHttpActionResult GetUserEmail(string Email)
{
var User = (db.Users
.Where(p => p.Email == Email)
.FirstOrDefault());
if (User == null)
{
return Ok(false);
}
else
{
return Ok(true);
}
}

How to deal with a non existing session variable?

I am trying to check if a booking record exists, then show its details. Otherwise return to Bookparking page but else part isn't working and shows Object reference not set to an instance of an object because there is no such field with the Session[""]
Controller:
public ActionResult Viewparking()
{
if (IsUserLoggedIn(Session, Request) == false)
{
return RedirectToAction("login");
}
else
{
String id = Session["username"].ToString();
ViewBag.userid = id;
var checkbooking = db.tb_booking.Where(s => s.username == id).FirstOrDefault();
if (checkbooking != null)
{
var show = db.tb_booking.Where(e => e.username == id).FirstOrDefault();
}
else
{ //ViewBag.f = "You have no booking yet!!";
return RedirectToAction("Bookparking", "user");
}
return View();
}
}
As Gabriel noted, you have not null checked the value from the session. Code would be something like this:
public ActionResult Viewparking()
{
if (IsUserLoggedIn(Session, Request) == false)
{
return RedirectToAction("login");
}
else
{
String id = Session["username"]?.ToString();
if (id != null)
{
ViewBag.userid = id;
var checkbooking = db.tb_booking.FirstOrDefault(s => s.username == id);
if (checkbooking != null)
{ // TODO: checkbooking is currently unused, except to check if you can fetch it.
return View();
}
}
// If you reach this code, then either id is null, or the booking was not found
return RedirectToAction("Bookparking", "user");
}
}

Compare user input values with values in database in asp.net mvc

Heading ##[HttpPost]
public ActionResult LogIn(UserDetail user)
{
using (AdventureWorksDBEntities User = new AdventureWorksDBEntities())
{
var UserInput= User.UserDetails.Where(b => b.UserName == user.UserName && b.Password == user.Password).FirstOrDefault();
if (UserInput!=null)
{
Session["Id"] = UserInput.id.ToString();
Session["UserName"] = UserInput.UserName.ToString();
return Redirect("#");
}
else
{
ModelState.AddModelError("","Username or Password Doesn't Exist");
}
}
return View();
I want to compare user input values with the values in the database.

Using mocks to test controllers

It is my second day of learning and doing unit testing. and my team uses NSubstitute.
Here is the action method I have written and now I have to write some unit tests for it. I don't know how to go about it? Do we mock the controller? then do we mock a GET method? How ? How do we test if it posted something and was POST ? etc...
public ActionResult ForgotPassword(string button, ForgotPasswordViewModel fpModel = null)
{
string method = HttpContext.Request.HttpMethod;
if (method == "GET")
{
ViewBag.Status = "CREATE_TASK";
ForgotPasswordViewModel model = _forgotPasswordManager.LoadForgotPasswordSettings();
ModelState.Clear();
if (model != null && !string.IsNullOrWhiteSpace(model.ForgotPasswordMethod) && model.ForgotPasswordMethod.Trim().ToUpper() == "TASKS")
return View(model);
}
if (method == "POST")
{
// cancel button, go back to LoginPage
if (!string.IsNullOrEmpty(button) && button == "cancel")
{
return RedirectToAction("Login");
}
else
{
if (this.CreateTask(fpModel))
{
ViewBag.Status = "TASK_CREATED";
}
else
{
fpModel = new ForgotPasswordViewModel();
ViewBag.Status = "CREATE_TASK";
return View(fpModel);
}
}
}
return View(fpModel);
}

i have been trying to implement custom login where i'll be updating the password but db.savechanges isn't working with my code

public ActionResult ChangePassword(ChangePassword model)
{
if (ModelState.IsValid)
{
UserDetail ud = db.UserDetails.FirstOrDefault(s => s.UserName == User.Identity.Name);
try
{
if (ud.Password == model.OldPassword)
{
ud.Password = model.NewPassword;
TryUpdateModel(ud);
**db.SaveChanges();**
return RedirectToAction("ChangePasswordSuccess");
}
else
{
ViewBag.ErrorMsgForPassword = "old password is not correct";
}
}
catch
{
return View();
}
}
while password change the complex types were not loaded so while updating he password db.savechanges() didn't work so if you load the complex types(addresses in this case) the problem is solved

Resources