programing

ASP .NET MVC 필드별 수준에서 클라이언트 측 유효성 검사 사용 안 함

lovejava 2023. 10. 16. 21:26

ASP .NET MVC 필드별 수준에서 클라이언트 측 유효성 검사 사용 안 함

ASP를 쓰고 있습니다.데이터 주석 및 jQuery validate 플러그인이 포함된 NET MVC 3.

특정 필드(또는 특정 데이터 주석)는 서버 측에서만 유효성을 확인하도록 표시할 수 있는 방법이 있습니까?

마스킹 플러그인이 있는 전화번호 필드가 있는데, 정규 표현식 검증기가 사용자 끝에 미쳐 버립니다.regex는 fail-safe(누군가가 자바스크립트 유효성 검사를 해킹하기로 결정한 경우)일 뿐이므로 클라이언트 측에서 실행하는 데 필요하지 않습니다.그래도 다른 검증을 통해 클라이언트 측을 실행했으면 합니다.

이 솔루션이 MVC3에서 작동하는지 잘 모르겠습니다.MVC4에서도 확실히 작동합니다.

필드를 렌더링하기 전에 레이저 보기에서 클라이언트 측 유효성 검사를 비활성화하고 필드가 렌더링된 후에 클라이언트 측 유효성 검사를 다시 활성화할 수 있습니다.

예:

<div class="editor-field">
    @{ Html.EnableClientValidation(false); }
    @Html.TextBoxFor(m => m.BatchId, new { @class = "k-textbox" })
    @{ Html.EnableClientValidation(true); }
</div>

여기서는 BatchId 필드에 대한 클라이언트 측 유효성 검사를 비활성화합니다.

또한 이를 위한 작은 조력자를 개발했습니다.

public static class YnnovaHtmlHelper
{
    public static ClientSideValidationDisabler BeginDisableClientSideValidation(this HtmlHelper html)
    {
        return new ClientSideValidationDisabler(html);
    }
}

public class ClientSideValidationDisabler : IDisposable
{
    private HtmlHelper _html;

    public ClientSideValidationDisabler(HtmlHelper html)
    {
        _html = html;
        _html.EnableClientValidation(false);
    }

    public void Dispose()
    {
        _html.EnableClientValidation(true);
        _html = null;
    }
}

다음과 같이 사용합니다.

<div class="editor-field">
    @using (Html.BeginDisableClientSideValidation()) {
        @Html.TextBoxFor(m => m.BatchId, new { @class = "k-textbox" })
    }
</div>

더 좋은 해결책을 가진 사람이 있다면 저에게 알려주세요!

도움이 되길 바랍니다.

다음을 추가하여 단일 필드에 대한 클라이언트 측 방해되지 않는 유효성 검사를 끌 수 있습니다.data-val='false'특성:

@Html.TextBoxFor(m => m.BatchId, new { data_val = "false" })

이것은 다음과 같은 것을 우선합니다.data-val='true'MVC가 추가하는 속성은 다음과 같습니다.System.ComponentModel.DataAnnotations특성.HTML 요소는 여전히 다른 유효성 확인 속성(예: data-val-required)으로 장식되지만 효과는 없습니다.

(의 밑줄을 참고합니다.data_val위. MVC는 익명 유형 속성에서 밑줄을 하이픈으로 자동 변환하므로,data_val된다data-valHTML을 렌더링할 때)

MVC5는 jquery.validate를 사용합니다.

http://jqueryvalidation.org/rules/

MVC5 클라이언트-Side에서 유효성 검사를 제거하려면 다음 작업을 수행해야 합니다.

'내 입력'에서 모든 유효성 검사 제거

$("#myinput").rules("remove");

구체적 유효성 검사

$("#myinput").rules("remove", "min max" );

유효성 검사를 나열하면 도움이 됩니다.

$("#myinput").rules();

그런 다음 코드 비하인드를 수정하여 수동으로 모델을 검증하거나 다른 방식으로 검증해야 합니다.ModelState.IsValid거짓이 될 것입니다.사용.ModelState.Clear()그리고.TryValidateModel그러면 편리해질 수 있습니다.

편집:

컨트롤을 비활성화하면 유효성 검사도 제거됩니다.

$("#myinput").attr('disabled', disabledValue);

기본적으로 방해받지 않는 유효성 검사를 사용한다고 가정하면 일부 자바스크립트를 사용하여 클라이언트 측의 규칙을 제거할 수 있습니다.플러그인/유효성 검사/규칙 보기

주어진 시나리오에서 이 목표를 달성하기 위해서는 두 가지 수정이 필요합니다.

클라이언트측

클라이언트 측 유효성 검사를 비활성화하려면 강제로 비활성화해야 합니다.

@Html.EditorFor(model => model.Password, new { htmlAttributes = new {  @data_val = "false" , @class = "form-control"} })

@data_val= "false"에 주목합니다.이 필드에서 유효성 검사를 사용할 수 없습니다.

서버측(실행중)

모델이 사후 조치에서 유효성이 확인되면 ModelState(모델 상태.암호가 제공되지 않았으므로 IsValid는 항상 false를 반환합니다.여기서 우리는 현재의 비밀번호를 모델에 제공하고 모델을 다시 검증해야 합니다.

var userObj = db.Users_Info.Where(a => a.Id == users_Info.Id).FirstOrDefault();
if (String.IsNullOrEmpty(users_Info.Password))
{
  users_Info.Password = userObj.Password;
}
ModelState.Clear();
TryValidateModel(users_Info);

설명하겠습니다. 우선 암호가 제공되지 않은 경우 나중에 현재 모델에 할당하기 위해 사용하는 데이터베이스에 저장된 현재 정보를 검색합니다.마지막 두 줄은 실제로 ModelState를 재설정하여 ModelState에 업데이트된 결과를 반환합니다.유효합니다.

data_val="true"에서 문제가 발생했습니다.제 모델에는 라디오 버튼이 하나의 건물에 연결되어 있었습니다.데이터 유효성 검사는 첫 번째 @Html에 data_val="true"를 적용했을 때만 작동했습니다.라디오 버튼호출.

이 디버깅 과정에서 data_rule_?을(를) 사용하여 클라이언트 측의 개별 규칙을 비활성화하거나 변경할 수도 있다는 것을 알게 되었습니다.규칙은 jquery validation 설명서에서 찾을 수 있습니다.

예를 들어,

@Html.RadioButtonFor(m => m.Answer, "Yes", new { data_rule_Required = "false" });
@Html.TextBoxFor(m => m.Answer, new { data_rule_minlength = "10" }

MVC5 클라이언트-Side에서 유효성 검사를 제거하려면 다음 작업을 수행해야 합니다.

$("#Email").rules("remove", {
                        "required",
                        "minlength",
                        "email"                           
                        }
                    });

언급URL : https://stackoverflow.com/questions/5630424/asp-net-mvc-disable-client-side-validation-at-per-field-level