이것은 아마도 간단한 질문 일 수 있지만 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가있는 필터를 가져 오기 때문에 발생합니다. 누구든지 해결책을 제안 할 수 있습니까?
아마 당신이 뭘하고 있는지 알 수는 없지만 단순히'keypress' 이벤트를 자동 완성 입력에 첨부 할 수없는 이유는 무엇입니까? –
자동 완성 기능이 상자를 비우더라도 호출하는 문제가 있습니까? –
죄송합니다, 아마도 나는 명확하지 않았습니다. 내가하고 싶은 것은 작성자 필터를 쉽게 제거 할 수있는 방법을 제공하는 것입니다. 사용자가 입력 상자를 지우고 Enter 키를 누를 수 있도록 할 생각이었습니다. 이 경우 POST가 발생해야하지만 일부 필터링 후에 뷰가 생성 될 때 작성자 ID가 아닌 AuthorId의 게시 된 매개 변수가 null이어야합니다. 따라서 Enter 키 누르기에 반응해야하며 양식이 게시되기 전에 작성자가 더 이상 필터링하지 않고 목록을 재생성 할 수 있도록 AuthorId를 지워야합니다. – Naftis