سلام
یک کنترل داریم
مانند کنترلر زیر
[HttpPost] [ValidateAntiForgeryToken] public ActionResult Login(UserLogin userLogin) { if(user==userLogin.user && pass==userLogin.pass) { return RedirectToAction("ChangePassword"); } }
که کاربر را انتقال می دهد به صفحه
ChangePassword
و کنترلهای تغییر پسورد هم بصورت زیر است
[HttpGet] public ActionResult ChangePassword() { if (HttpContext.GetCookieValue("Existence") != "") { return View(); } else { return RedirectToAction("Login"); } } [HttpPost] [ValidateAntiForgeryToken] public ActionResult ChangePassword(UserChangePassword userChangePassword) { var user = new UserRepositories(); if (ModelState.IsValid) { if (user.Update(UserMapper.UserChangePassword(userChangePassword))) { return RedirectToAction("Index"); } else { return View("ChangePassword"); } } else { return View("Create"); } }
و صفحه تغییر پسورد هم بصورت زیراست
@model Models.EntityView.UserChangePassword @{ ViewBag.Title = "ChangePassword"; } <h2>ChangePassword</h2> @using (Html.BeginForm()) { @Html.AntiForgeryToken() <div class="form-horizontal"> @Html.ValidationSummary(true) <div class="form-group"> <div class="col-md-10"> @Html.EditorFor(model => model.UserName, new { htmlAttributes = new { @class = "form-control" , @Value = ViewBag._userName } }) @Html.ValidationMessageFor(model => model.UserName, "", new { @class = "text-danger" }) </div> @Html.LabelFor(model => model.UserName, htmlAttributes: new { @class = "control-label col-md-2" }) </div> <div class="form-group"> <div class="col-md-10"> @Html.EditorFor(model => model.OldPassword, new { htmlAttributes = new { @class = "form-control" } }) @Html.ValidationMessageFor(model => model.UserName, "", new { @class = "text-danger" }) </div> @Html.LabelFor(model => model.UserName, htmlAttributes: new { @class = "control-label col-md-2" }) </div> <div class="form-group"> <div class="col-md-10"> @Html.EditorFor(model => model.Password, new { htmlAttributes = new { @class = "form-control" } }) @Html.ValidationMessageFor(model => model.Password, "", new { @class = "text-danger" }) </div> @Html.LabelFor(model => model.Password, htmlAttributes: new { @class = "control-label col-md-2" }) </div> <div class="form-group"> <div class="col-md-10"> @Html.EditorFor(model => model.ConfirmPassword, new { htmlAttributes = new { @class = "form-control" } }) @Html.ValidationMessageFor(model => model.ConfirmPassword, "", new { @class = "text-danger" }) </div> @Html.LabelFor(model => model.ConfirmPassword, htmlAttributes: new { @class = "control-label col-md-2" }) </div> <div class="form-group"> <div class="col-md-offset-2 col-md-10"> <input type="submit" value="Create" class="btn btn-default" /> </div> </div> </div> } <div> @Html.ActionLink("Back to List", "Index") </div>
حال سوال من این است که چگونه وقتی می خواهم بروم صفحه تغییر پسورد تکس باکس UserName نام کاربری را دریافت کند و بصورت read only باشد
باتشکر
داخل مدل صفحه نام کاربری را پاس بدید خودش داخل textbox قرار میگیره و بعد خاصیت readonly رو به editorfor بدید
سلام دقیقا کجا مدل وچطوری؟
باتشکر
در اکشن get که view را لود میکنه
سلام
من با کد زیر مشکل را حل کردم
var changePassword = new UserChangePassword { UserName = userLogin.UserName, OldPassword = userLogin.Password, HashCode = hash }; TempData["PasswordChange"] = changePassword;
و
[HttpGet] public ActionResult ChangePassword() { var userChangePassword = TempData["PasswordChange"] as UserChangePassword; return View(userChangePassword); }
اما مشکل جدید اینه که وقتی وارد صفحه مورد نظر می شویم مقدار model.OldPassword درصورتیکه من می خواهم خالی باشدmodel.OldPassword برای حل این مشکل چکار باید بکنم
باتشکر
در مدل این فیلد را پر نکنید
شما الان مقدار دهی کردید
سلام
بله مقدار دهی کرده ام
درصورتیکه مقدار دهی نکنم چگونه می توان آنرا به سمت کنترلر مورد نظرپاس بدهم برای چک کردن برابر بودن پسورد های قدیمی
<div class="form-group"> <div class="col-md-10"> @Html.EditorFor(model => model.OldPassword, new { htmlAttributes = new { @class = "form-control" } }) @Html.ValidationMessageFor(model => model.OldPassword, "", new { @class = "text-danger" }) </div> @Html.LabelFor(model => model.OldPassword, htmlAttributes: new { @class = "control-label col-md-2" }) </div>
چک کردن پسورد قدیمی باید سمت کنترلر و در متد post انجام بشه نه سمت کلاینت که اصلا منطقی نیست و راحت میتونه بدست بیاره
هیچ کاربری تا کنون از این پست تشکر نکرده است
با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)