2011-01-20 4 views
30

새 ASP.Net MVC 3 RemoteAttribute를 사용하여 단일 매개 변수가있는 작업 메서드에 원격 호출을 보냈습니다. 지금은 AdditionalFields 속성을 사용하여 두 번째 매개 변수에 전달하려는 :ASP.Net의 원격 유효성 검사 MVC 3 : 추가 메서드를 사용하는 방법

[Remote("IsEmailAvailable", "Users", AdditionalFields = "InitialEmail")] 

을 IntialEmail 뷰에서 숨겨진 필드입니다. 뷰가 렌더링 될 때

public JsonResult IsEmailAvailable(
      string email, 
      string InitialEmail) 
{ 
//etc. 
} 

가 숨겨진 필드가 채워집니다 만, 작업 방법 원격 트리거 될 때, 값은 빈 문자열입니다 : 액션은 너무 것 같습니다.

다른 곳에서 대소 문자를 구분하는 것이 문제가 될 수 있으므로 Action 메서드에 두 매개 변수가 모두 동일하게 적용됩니다.

다른 제안 사항이 있으십니까? 이 AdditionalFields는 Fields라고 불 렸습니다.

감사합니다,

Beaudetious

+0

보기의 마크 업을 추가 할 수 있습니까? 추가 필드는보기의 필드 중 하나와 일치해야합니다. 이메일에 대한 가치는 있지만 InitialEmail에 대한 빈 문자열입니까? 조사하려면 방화 광을 사용하여 디버그하는 것이 도움이되며 서버로 다시 전송되는 요청을 볼 수 있습니다. 그것은 당신의 행동이 기대하는 분야에 대해 질의를해야합니다. 뭔가가 좋아? 이메일 = 어쩌구? InitialEmail = 어쩌구 ... –

+0

내 질문에 대한 또 다른 답변이이 문제를 해결했습니다. http://stackoverflow.com/questions/4696276/client-side-validation-not-firing-for -compareattribute-dataannotation 그러면이 질문에 어떻게 답변해야합니까? – beaudetious

답변

59

이상한. 그것은 나를 위해 작동 :

모델 :

public class MyViewModel 
{ 
    [Required] 
    [Remote("IsEmailAvailable", "Home", AdditionalFields = "InitialEmail")] 
    public string Email { get; set; } 
} 

컨트롤러 :

public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     return View(new MyViewModel()); 
    } 

    [HttpPost] 
    public ActionResult Index(MyViewModel model) 
    { 
     return View(model); 
    } 

    public ActionResult IsEmailAvailable(string email, string initialEmail) 
    { 
     return Json(false, JsonRequestBehavior.AllowGet); 
    } 
} 

보기 : IIRC ASP.NET MVC 3 RC2에서 일부 버그가이와 있었다

@model AppName.Models.MyViewModel 
@{ 
    ViewBag.Title = "Home Page"; 
} 
<script src="@Url.Content("~/Scripts/jquery.validate.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.js")" type="text/javascript"></script> 
@using (Html.BeginForm()) 
{ 
    @Html.TextBoxFor(x => x.Email) 
    @Html.ValidationMessageFor(x => x.Email) 
    <input type="hidden" name="InitialEmail" value="[email protected]" /> 
    <input type="submit" value="OK" /> 
} 

RTM에서 수정 된 원격 유효성 검사

+6

Darin : 당신과 당신의 "나를 위해 일하는"언젠가는 저의 죽음이 될 것입니다. ;) – beaudetious

+0

그러나 IsEmailAvailable 메서드의 InitialEmail 값을 출력 창에 인쇄하십시오. 비어있는 것을 볼 수 있습니다. 원격 메소드를 실행할 수 있지만 추가 매개 변수에는 값이 없습니다. – beaudetious

+0

@beaudetious, 나는 그것을했고 그것은 공백이 아니었다. 또한 보낸 요청에 따라 FireBug를 보았습니다. 나는 또한 값을 볼 수 있었다 :-) 잠깐, 나는 당신에게 나의 샘플 프로젝트를 보낼 것이다. 내 맥주를 마시면. –

2

사용자의 숨겨진 필드는 유효성 검사중인 필드 (예 : Darin의 예와 같은 양식) 내에 있어야하며, 그렇지 않으면 숨겨진 필드의 값이 유효성 검사 작업 메서드에 매개 변수로 전송되지 않습니다. "public ActionResult IsEmailAvailable 전자 메일, 문자열 initialEmail) "

-1

기능 IsEmailAvailable (문자열 전자 메일, 문자열 initialEmail) 매개 변수 전자 메일은 전자 메일 주소로 등록 정보 전자 메일과 동일해야합니다.

+0

대소 문자는 중요하지 않습니다. MVC 프레임 워크는 대소 문자를 구분하지 않습니다. – Fred

관련 문제