2011-09-25 4 views
0

이것은 아마도 간단한 질문 일 수 있지만 MVC3을 사용하는 jQuery를 처음 사용합니다. 색인 작업을 통해 저자와 함께 몇 가지 논문을 나열하는 MVC3 응용 프로그램이 있습니다. 사용자는 (다른 매개 변수 중에서) 작성자 이름으로 목록을 필터링 할 수 있으므로 jQueryUI 자동 완성을 사용하여 입력 요소를 사용하여 문자를 입력하고 원하는 작성자를 선택할 수 있습니다. 이 때 내 JS 코드 숨겨진 된 요소에 ID를 저장하고 양식 게시; ID는 모델 바인더를 통해 모든 내 필터를 나타내는 객체로 전달됩니다. 필터 오브젝트양식을 MVC3 작업에 제출하기 전에 입력 요소 값을 조건부로 재설정

는 같다 :

public sealed class PaperFilter 
{ 
    public int? AuthorId { get; set; } 
    // ... other params here 
} 

제어기 동작은 페이지 번호를 수신하고, 파라미터 (뷰가 MvcContrib 그리드를 사용)와,이 필터를 정렬. 그런 다음 논문의 목록 및 필터 특성을 나타내는 속성의 수를 포함하는 뷰 모델을 생성하고, 다시보기로 전달합니다 :

public ViewResult Index(int? page, GridSortOptions sort, PaperFilter filter) 
{ 
    var papers = _repository.GetPapers(filter); 
    if (sort.Column != null) 
    papers = papers.OrderBy(sort.Column, sort.Direction); 
    ViewBag.Sort = sort; 

    PaperIndexModel model = new PaperIndexModel(filter) 
    { Papers = papers.AsPagination(page ?? 1, 10) }; 

    if (filter.AuthorId.HasValue) 
    { 
    Author author = _repository.GetAuthor((int)filter.AuthorId); 
    model.AuthorName = author.FirstName + " " + author.LastName; 
    } 

    return View(model); 
} 

반환 된 모델의 사본과 함께 논문의 목록이 포함되어 있습니다 필터 속성.

뷰 형태로 관련 코드는 다음과 같습니다

... 
@Html.TextBoxFor(m => m.AuthorName) 
@Html.HiddenFor(m => m.AuthorId) 
... 

와 JS 코드 : 이것은 잘 작동

<script type="text/javascript"> 
    $(function() { 
    $("#AuthorName").autocomplete({ 
     source: function (request, response) { 
     $.ajax({ 
      url: "/Author/FindAuthor", type: "POST", dataType: "json", 
      data: { LastName: request.term }, 
      success: function (data) { 
      response($.map(data, function (item) { 
       return { label: item.FirstName + ' ' + item.LastName, value: item.LastName, id: item.Id }; 
      })); 
      } 
     }); 
     }, 
     select: function (event, ui) { 
     $("#AuthorName").val(ui.item.value); 
     $("#AuthorId").val(ui.item.id); 
     $(this).closest("form").submit(); 
     } 
    }); 
    }); 
</script> 

, 어쨌든 나는 단순히을 취소하여 저자 필터를 다시 내 사용자를하고 싶습니다 입력란 (AuthorName)을 입력하고 Enter 키를 누릅니다. 이렇게하려면 AuthorId 값을 다시 설정해야합니다. 즉 양식을 게시하기 전에 $ ("# AuthorId"). val ("")과 같은 작업을해야합니다. 키 누르기에서이 작업을 시도했지만 게시물이 발생하기 전에는 실행되지 않습니다. 내 작업은 여전히 ​​작성된 AuthorId가있는 필터를 가져 오기 때문에 발생합니다. 누구든지 해결책을 제안 할 수 있습니까?

+0

아마 당신이 뭘하고 있는지 알 수는 없지만 단순히'keypress' 이벤트를 자동 완성 입력에 첨부 할 수없는 이유는 무엇입니까? –

+0

자동 완성 기능이 상자를 비우더라도 호출하는 문제가 있습니까? –

+0

죄송합니다, 아마도 나는 명확하지 않았습니다. 내가하고 싶은 것은 작성자 필터를 쉽게 제거 할 수있는 방법을 제공하는 것입니다. 사용자가 입력 상자를 지우고 Enter 키를 누를 수 있도록 할 생각이었습니다. 이 경우 POST가 발생해야하지만 일부 필터링 후에 뷰가 생성 될 때 작성자 ID가 아닌 AuthorId의 게시 된 매개 변수가 null이어야합니다. 따라서 Enter 키 누르기에 반응해야하며 양식이 게시되기 전에 작성자가 더 이상 필터링하지 않고 목록을 재생성 할 수 있도록 AuthorId를 지워야합니다. – Naftis

답변

0

.ajax() 호출 바로 전에 확인하십시오. 길이가 0 인 경우 .ajax를 사용하지 않고 반환 만하면됩니다.

관련 문제