เปรียบเทียบรหัสผ่านและยืนยันรหัสผ่านใน ASP.Net MVC

เป็นไปได้หรือไม่ที่จะเปรียบเทียบข้อความของกล่องข้อความยืนยันรหัสผ่านกับ @Html.PasswordFor(model=>model.Password)

@using (Html.BeginForm())
{
    <table>

        <tr>
            <td>@Html.LabelFor(model => model.Password)</td>
            <td>@Html.PasswordFor(model => model.Password)</td>
            <td>@Html.ValidationMessageFor(model => model.Password)</td>
        </tr>
        @*Here I want to take "Confirm Password" and want to compare it with "Password" in View(.cshtml only) as
          I have not taken ConfirmPassword in my model.*@
        <tr>
            <td>
                <input type="submit" value="Create" />
            </td>
        </tr>
    </table>              
}

กรุณาแนะนำวิธีหรือวิธีแก้ไขใด ๆ

วิธี compare password และ confirm password โดยไม่ต้องได้รับการยืนยันคุณสมบัติรหัสผ่านใน Model ขอบคุณ....


person Vishal Hirapara    schedule 13.02.2014    source แหล่งที่มา


คำตอบ (6)


การใช้ Compare DataAnnotation จะง่ายต่อการเปรียบเทียบรหัสผ่าน แต่ถ้าสร้างโมเดลจากฐานข้อมูลให้ใช้ NotMapped, คุณสมบัติที่ไม่ได้แมปในกรอบงานเอนทิตีโดยใช้กลยุทธ์ที่เน้นโค้ดเป็นอันดับแรก

[Required]
public string Password { get; set; }

[NotMapped] // Does not effect with your database
[Compare("Password")]
public string ConfirmPassword { get; set; }
person Sender    schedule 13.02.2014
comment
เป็นไปได้ไหมที่จะเปรียบเทียบข้อความของกล่องข้อความยืนยันรหัสผ่านกับ @Html.PasswordFor(model=›model.Password) - person Vishal Hirapara; 13.02.2014

เปลี่ยนโมเดลของคุณเพื่อรวมตัวแปรยืนยันรหัสผ่าน

[Required]
public string Password { get; set; }
[Compare("Password")]
public string ConfirmPassword { get; set; }
person COLD TOLD    schedule 13.02.2014
comment
เป็นไปได้ไหมที่จะเปรียบเทียบข้อความของกล่องข้อความยืนยันรหัสผ่านกับ @Html.PasswordFor(model=›model.Password) - person Vishal Hirapara; 13.02.2014

เพียงเพิ่ม [NotMapped] ที่ด้านบนของคุณสมบัติยืนยันรหัสผ่านของคุณในโมเดลข้อมูล

[NotMapped]
[Required(ErrorMessage = "Confirm Password required")]
[CompareAttribute("NewPassword", ErrorMessage = "Password doesn't match.")]        
public string ConfirmPassowrd { get; set; }

ด้วยวิธีนี้ มันจะไม่ตรวจสอบคุณสมบัติ ConfirmPassword ในตาราง DB ของคุณ

person Steve    schedule 02.06.2016

เพิ่งลอง [Compare("field_to_compare")] และใช้งานได้ใน MVC 5 ด้วย

person Bogdan Mates    schedule 26.08.2015

ลองเขียน javascript เพื่อเปรียบเทียบรหัสผ่าน...

แต่ DataAnnotation เป็นที่ต้องการ

person Nilesh Gajare    schedule 13.02.2014
comment
แม้ว่านั่นอาจจะเพียงพอที่จะจำกัดความเสี่ยงได้อย่างมาก แต่การตรวจสอบฝั่งไคลเอ็นต์ไม่ใช่การตรวจสอบจริง... - person Laurent S.; 26.08.2015

คุณสามารถเปรียบเทียบค่ากล่องข้อความ "รหัสผ่าน" กับค่ากล่องข้อความ "ยืนยันรหัสผ่าน" ได้ทั้งในฝั่งไคลเอ็นต์และฝั่งเซิร์ฟเวอร์ วิธีแก้ปัญหาที่ผู้อื่นมอบให้นั้นมีไว้เพื่อการยืนยันทางฝั่งเซิร์ฟเวอร์ หากคุณไม่ต้องการรวม "ยืนยันรหัสผ่าน" ในโมเดลของคุณ คุณจะต้องเปรียบเทียบฝั่งไคลเอ็นต์ ซึ่งสามารถทำได้ผ่าน Javascript คุณสามารถเขียนโค้ดเพื่อเปรียบเทียบด้วยตนเอง หรือคุณสามารถรวมสคริปต์ต่อไปนี้ในไฟล์ .cshtml ของคุณ (สมมติว่าคุณใช้ Visual Studio เพื่อเขียนโค้ดของคุณ)

<script src="/Scripts/jquery-3.3.1.js"></script>
<script src="/Scripts/jquery.validate.js"></script>
<script src="/Scripts/jquery.validate.unobtrusive.js"></script>

จากนั้นคุณควรสร้างฟิลด์ดังนี้:

 <input  data-val="true" data-val-equalto="Password and Confirmation Password must match." data-val-equalto-other="*.Password" data-val-required="Required." id="ConfirmPassword" name ="ConfirmPassword"  type="password" />
<span class="field-validation-valid error" data-valmsg-for="ConfirmPassword" data-valmsg-replace="true"></span>

เพื่อเปรียบเทียบช่องพิมพ์ "รหัสผ่าน" กับช่อง "ยืนยันรหัสผ่าน" และยังแสดงข้อความแสดงข้อผิดพลาดหากค่าในกล่องข้อความทั้งสองไม่ตรงกัน โดยที่คุณไม่ต้องเขียนโค้ดเพิ่มเติม

แม้ว่าแนวทางปฏิบัติที่ดีคือการตรวจสอบทั้งฝั่งไคลเอ็นต์และฝั่งเซิร์ฟเวอร์

person Omkar    schedule 23.08.2019