문제

의 많음이있는 아주 좋은 포스트와 설명을 구현하는 방법을 검증 ASP.NET MVC,내가 선호하는 하나의 이러한:

그러나,정말 좋아를 호출하 ActionMethods 을 통해 jquery$.ajax 방법입니다.하나의 이유가 사용하고 싶$.ajax 이 있을 것이기 때문에 많은 부분적인 보드로 페이지를 동적으로(심지어는 양식을 위해 엔터티를 창조를 통해)$.ajax 및 수 없습니다 그냥 돌려보기-나는 모두 잃을 동적으로 읽어 콘텐츠입니다.

당신은 더 나은 보기에 문제가 나는 포스트는 몇 가지 간단한 코드는 방법을 설명하는 것이 전화를 좋아하는 컨트롤러 활동 및 처리에 응답을 클라이언트,jquery 코드입니다.

컨트롤러 ActionMethod:

    public ActionResult CreateCustomer(string name, string accountNumber)
    {
        try
        {
            CustomerService.InsertCustomer(name, accountNumber);

            return Json(new ActionInfo()
            {
                Success = true,
                Message = "Customer Is Successfully Created"
            });

        }
        catch (Exception ex)
        {
            return Json(new ActionInfo()
            {
                Success = false,
                Message = ex.Message
            });
        }
    }

전화 및 처리에서 클라이언트 코드:

$.ajax({
type: "POST",
url: $form.attr('action'),// /MyController/CreateCustomer
data: $form.serialize(),
error: HandleUnespectedError,
dataType: "json",
success: function(response) {

    if (response.Success)
        alert("Success: " + response.Message);
    else
        alert("Error: " + response.Message);
}});

있는 좋은 방법의 일부를 확인하기 위해 이러한 유효성 검사 프레임워크를 작동하는 방식이 필요? 고 있다는것을 알 수 있습니다 추가할 수 있는 유효성 검사 오류를 ActionInfo 한 다음,손잡이에서 클라이언트,하지만 하는 것을 이미 건물의 하나의 유효성 확인,저는 믿습니다.

도움이 되었습니까?

해결책

내가 위대한 성공을 검증 AJAX 를 통해 데이터를 사용하여 주석의 특성이 있습니다.기 위해 유효성을 확인하기 위해 데이터의 당신이 원하는 것을 사용하여 컨트롤러 ModelState 제공하는 속성이 있는 그것의 자신의 불 IsValid.나는 강하게 복용 제안에 데이터 주석 유효성 속성은 튜토리얼 공식에서 ASP.NET MVC 사이트입니다.

첫째,당신이 원하는 것을 수정하고 컨트롤러 작업을 받아들이는 모델의 개체 매개변수로,이 아닌 별도의 이름과 계정 번호입니다.이 검증을 수행하는 설명되어 있는 것을 아래 훨씬 더 간단합니다.귀하의 예제에서,내 최고 추측하는 모델의 개체,또 것,호출 고객입니다.할 수 있는 다음과 같은 코드를 정의하는 모델을 개체고의 컨트롤러 행동...

// model object
public class Customer
{
  public Int32 Id {get; set;}
  public String Name {get; set;}
  public String AccountNumber {get; set;}
}

// controller
public class CustomerController : Controller
{
  public ActionResult CreateCustomer( [Bind(Exclude = "Id")] Customer customer )
  {
     // controller action code
  }
}


는지 확인하 형태 필드의 이름을의 이름과 일치의 속성이 고객의 개체록 ASP.NET MVC 할 수 있는 자동적으로 bind them."Bind"특성,이 경우 말 ASP.NET MVC 을 무시하"Id"속성이 고객의 클래스의 경우 바인딩을 형성할 필드 모델의 속성입니다.이것은 새로운 고객,우리는 없 Id 아직,그래서 우리는 쉽게 확인할 수 있게 되었습니 Id 으로 어떤 기본값과 데이터를 레이어를 알아내는 방법이 최상이다.

컨트롤러가 생성한 모델에 대한 개체의 행동 방법의 유효성을 쉽게 확인할 수 있습을 통해 ModelState.IsValid 을 제공합니다.중 하나로서 기대할 수 있습니다,그것은 반환하는 경우 true 모델 속성이 유효한 경우 false 를 1 개 또는 그 이상의 속성은 잘못되었습니다.

에서 원래의 질문에,그것은 나타납니다 CustomerService.InsertCustomer 방법은 예외가 발생되는 유효성 검사에 실패한 경우.이것은 완전히 필요 하지 않습니다.InsertCustomer 해야만을 수행해야 하는 모든 데이터 작업에 필요한 삽입하는 새로운 기록이다.여러분이 원하지 않는 한 추상적인 구현을 특정한 예외는 다음과 같 SqlException,InsertCustomer 하지 않아야 진짜로를 잡을 필요가 또는 예외를 발생하지만,가능성이 높습자는 모든 예외는 거품을 컨트롤러(또는 누구든지 발신자가 있을 수 있습니다).

결국 이 모든 것의 결과,수 컨트롤러는 활동은 다음과 같습니다:

public ActionResult CreateCustomer( [Bind(Exclude = "Id")] Customer customer )
{
  // model is invalid
  if (!ModelState.IsValid)
  {
    return Json(new ActionInfo()
    {
      Success = false,
      Message = "Validation failed" // you will probably want a more robust message :-)
    });
  }

  // service method accepts a Customer object rather than arbitrary strings  
  CustomerService.InsertCustomer(customer);

  return Json(new ActionInfo()
  {
    Success = true,
    Message = "Customer created successfully."
  });

}


를 보고하려는 경우에는 예상치 못한 오류는,다음과 같은 데이터베이스 관련 예외에,당신은 확실히 수을 추가하려고/catch 블록의 주위에 전화를 InsertCustomer 및 반환에 필요한 결과를 표시하는 오류 메시지를 다시 클라이언트입니다.

다른 팁

이것은 년 이상 한 후 요청 당신의 질문,하지만 나는 덮여 서버의 측면 유효성 검사 Ajax 를 통화 블로그 게시물 될 수 있는 그의 관심을 많이다.나는 당신이 돌아가지 못한 결과로서 성공적인 HTTP 호출합니다.나는 이것을 다르게 처리(나는 그것의 더 올바른 이후 $.ajax 기능 successerror 응답능).과의 특정 예제는 완벽한 예 구현 될 수있는 기능 설명 내에서 블로그 포스트를 확인해 보세요.

기본적으로 대신은 항상 돌아 성공적인 응답(지만 속성으로 설정된 클라이언트는 서버의 측면 처리하지 못했)내가 오히려 던져 exeception 서버에서 처리 그에 따라 그것에서 클라이언트입니다.내가 사용하여 사용자 지정 ModelStateException 클래스와 함께하는 HandleModelStateException 작업 필터링합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top