2013-05-20 3 views
3

화면에 링크를 클릭하면 팝업 창이 열리고 링크가있는보기는 _DetailsSurvey입니다. 링크를 클릭하면 _EditSurvey보기의 내용으로 팝업 창이 열립니다. _EditSurvey의 끝에서, 나는 아약스 옵션을 사용하여 버튼 후 modelstate이 유효한 경우 나 설문 조사 테이블에 행을 삽입을 클릭하고 버튼닫기 팝업 Windows MVC 컨트롤러

<input type="submit" value="Save" /> 

있습니다. 내가 원하는 무엇

@using (Ajax.BeginForm("SubmitSurvey", "Blog", null, new AjaxOptions 
    { 
    UpdateTargetId = "context", 
    InsertionMode = System.Web.Mvc.Ajax.InsertionMode.Replace, 
    HttpMethod = "Post", 
    Url = "/Home/SubmitSurvey" 
    }, 
    new { surveyItem = @Model })) 

는 modelstate가 SubmitSurvey 방법에서 돌아온 후 나는 영업 끝났 이것을 달성하기 위해 다음과 같은 방법을 사용하지만이 작동하지 않는 것으로 팝업 창을 원하는 유효한 경우입니다. 다음과 같이

Employee employee; 
    if (ModelState.IsValid) 
    { 

     int employeeId = surveyItem.EmployeeId; 
     int trainingId = surveyItem.TrainingId; 
     employee = _work.EmployeeRepository.GetSet(). 
     FirstOrDefault(a => a.Id == employeeId); 


     var training = _work.TrainingRepository.GetSet().Where(a => a.EmployeeId == employeeId && a.Id == trainingId).ToList().ElementAt(0); 
     training.Survey = surveyItem.survey; 
     training.SurveyId = surveyItem.survey.Id; 

     /* _work.SurveyRepository.Add(surveyItem.survey); 
     _work.SurveyRepository.Save();*/ 
     _work.TrainingRepository.UpdateAndSave(training); 
     _work.TrainingRepository.Save(); 

    } 
    else 
    { 

     return PartialView("_EditSurvey", surveyItem); 
    } 
    return JavaScript("window.close()"); 

내가 내 팝업 링크를 만들

<tr> 
    <td class="view_detail_label"> 
     Eğitim Adı 
    </td> 
     <td> 

      @Html.ActionLink(
      training.Name.Name, 
      "AddSurvey", 
      new { 
       employeeId = Model.Id, 
       trainingId = training.Id 
      }, 
      new { 
       @class = "addSurvey" 
      } 
     ) 
     <div class="result" style="display:none;"></div>    
     </td>    
    </tr> 

호출 된 아약스 코드는 다음과 같다 :

$(document).ready(function() { 
    $('.addSurvey').click(function() { 
     $.ajax({ 
      url: this.href, 
      type: 'GET', 
      cache: false, 
      context: this, 
      success: function (result) { 
       $(this).next('.result').html(result).dialog({ 
        autoOpen: true, 
        title: 'Anket', 
        width: 500, 
        height: 'auto', 
        modal: true 
       }); 
      } 
     }); 
     return false; 
    }); 
}); 

을 내가 이전에 표시된 아래 아약스 BeginForm 및 사용하고 내 팝업보기에서 사용자가 설문 조사의 값을 입력하는 표가 있습니다. 마지막에는 제출 버튼이 있습니다.

<table id="context"> 
<tr> 
    <td> 
     <div class="editor-label"> 
      @Html.LabelFor(model => model.survey.Context) 
     </div> 
    </td> 
    <td> 
     <div class="editor-field"> 
      @Html.EditorFor(model => model.survey.Context) 
      @Html.ValidationMessageFor(model => model.survey.Context) 
     </div> 
    </td> 
    </tr> 
<tr> 
     <td> 
      <input type="submit" value="Kaydet" /> 
      </td> 
    </tr> 

제공된 입력에 문제가있는 경우 각 입력란 옆에 확인 메시지가 표시됩니다. 모델이 유효하다면 팝업 창을 닫고 싶습니다.

+0

자바 스크립트가 MVC 컨트롤러에서 반환 되었습니까? 너도 할 수있어? 왜 그랬어? 사용자가 제공 한 양식을 작성하는 데 방해가되는 사용자에게 아무런 피드백도 제공하지 않습니다. jQuery 대화 상자를 사용하십시오. 양식으로 부분보기를로드하십시오. 눈에 띄지 않는 valdiation을 사용하여 클라이언트에서 유효성을 확인한 후 다시 제출하십시오! 그런 다음 양식이 저장되었음을 사용자에게 알리는 부분보기를 리턴하십시오. 대화 상자를 닫으십시오. –

+0

자바 스크립트를 반환 할 수 있지만 관련있는 다른 주제가 있지만이 경우에는 작동하지 않습니다. 모델의 각 필드에 대한 유효성 검사 메시지로 모델이 유효하지 않은 경우 사용자에게 피드백을 제공합니다. 작업이보기에서 성공적으로 완료되었음을 어떻게 알릴 수 있습니까? – Eneramo

+0

어쨌든 그것은 약간의 반 패턴이라고 생각합니다. 이것을 시도하십시오 http://stackoverflow.com/questions/7271005/asp-net-mvc-returning-javascriptresult-doesnt-work –

답변

2

여기서는 설명하지 않을 여러 가지 이유 때문에 팝업 창을 열지 않는 것이 좋습니다. 나는 완벽하다고 생각할 수있는 해결책을 찾는데 아주 오랜 시간을 보낸다.

필자는 뷰를 부분 뷰 (HTML, 헤더 및 본문 제외)로 준비합니다. 필요한 항목 만 div에 제 기능을 만듭니다.

그런 다음 부분 뷰 문자열로 div를 피드 한 다음 ajax 쿼리를 사용하여 부분 뷰를 요청하고 JQuery 대화 상자 메서드를 div에 적용하여 내 뷰를 부동 대화 상자로 표시하고 바인딩합니다. OK 단추를 Ajax 포스트에 보내서 서버에 데이터를 보냅니다. 작동을 방해하지 않는 유효성 검사를하려면 유효성 검사기로 양식을 구문 분석해야합니다.

내 프레임 워크를 살펴 보도록하겠습니다. 필요한 모든 것을 사용할 수 있습니다.

https://myprettycms.codeplex.com/SourceControl/latest#461106

+0

컨트롤러가 유효성 검사에 바인딩 된 문제를 구현하는 구성 요소를 찾을 수없는 것 같습니다. 설명해 주시겠습니까? 고맙습니다 – Eneramo