2014-11-05 4 views
1

누군가 도움이된다면 고맙겠습니다.폼 제출 결과에 따라 Ajax.BeginForm()의 UpdateTargetId를 동적으로 변경하십시오.

나는 사용자 유형에 따라 서로 다른 부분 뷰를 반환 할 :

[HttpPost] 
public ActionResult Edit(ContractModel model) 
{ 
    if(ModelState.IsValid) 
    { 
     if (curUser.IsInputer) { .... return View("Contracts");} 
     else if(curUser.IsAuthorizer) { ..... return View("Details");} 
    } 

    return PartialView(model); 
} 

보기 : ModetState.IsValid = false 내 기능 returnViewOnFailure이 발사되지 않은 경우

 @{ 
     string updateRegion = ""; 

     if (curUser.IsInputer) 
     { 
      updateRegion = "content"; 
     } 
     else if (curUser.IsAuthorizer) 
     { 
      updateRegion = "mainPane"; 
     } 
    } 
<script> 
    function returnViewOnFailure(result) { //not firing on submission failure 
     $("#mainPane").html(result); 
    } 
</script> 
    @using (Ajax.BeginForm("Edit", new AjaxOptions() { UpdateTargetId = updateRegion, 
                 InsertionMode = InsertionMode.Replace, 
                 OnFailure = "returnViewOnFailure" })) 
    {.........} 

문제가 있습니다. 양식 제출이 실패한 경우 (사용자 유형에 관계없이) UpdateTargetId"mainPane", 그렇지 않은 경우 curUser에 의존해야합니다.

편집 :

그래서,이 양식을 작성하는 아약스 호출을 사용하고 조언과 같이 유효성 검사가 서버 측 완료

<script> 
var form = $('#contract_form'); 
form.submit(function (ev) { 
    $.ajax({ 
     cache: false, 
     async: true, 
     type: "POST", 
     url: form.attr('action'), 
     data: form.serialize(), 
     success: function (data) { 
      $("#content").html(data); 
      //How to check ModelState.IsValid and show errors? 
     } 

    }); 
    ev.preventDefault(); 
}); 

+0

'Ajax.BeginForm'은 뷰가 처음로드 될 때 서버에서 평가되어, 메소드가 반환하는 것과 상관없이 항상 동일한 'targetID'를 사용하게됩니다. 둘째, 'OnFailure'가 결코 부딪 치지 않도록 오류를 던지지 말라. –

+0

Ajax.BeginForm 메소드에 의해 생성 된 html을보십시오. targetId는 "data-ajax-update"속성에 있습니다. 양식을 제출할 때 속성의 값을 변경하는 일부 Java 스크립트를 구현하십시오. – Tobias

+0

페이지로드 및 $ ("# mainPane"). html (content)의 유효성을 확인하기 위해 ViewContext.ViewData.ModelState를 검사하면 어떻게되지만 콘텐츠를 어떻게 얻을 수 있습니까? –

답변

1

때문에 당신의 statusCode을 설정할 수 있습니다 응답 (Controller.Response).

유효성 검사가 성공하지 못하면 500 (내부 서버 오류)으로 설정하면 ajax.onfailure가 호출됩니다. 거기에 validationerror 논리 (divs 내용 바꾸기)를 넣으십시오. 또는 maybee도 onfailure (자바 스크립트에 의해)에서 updatetargetid을 변경할 수 있습니다.

+0

고마워요 !! 이것은 내가 필요한 것입니다. Btw 나는 updateTargetID를 변경하면 양식을 다시 확인해야만 작동한다고 생각합니다. 정말 고마워! –

관련 문제