2011-01-19 3 views
0

버튼이 있습니다.ASP.NET MVC : 모델 바인딩 및 Ajax 요청

<a id="2" class="modalInput specialbutton" href="/Employee/Delete/2" rel="#yesno"><img src="/Content/Images/application_delete.png" alt="Delete" /></a> 

버튼 용 자바 스크립트 :

var buttons = $("#yesno button").click(function (e) { 
       var yes = buttons.index(this) === 0; 
       if (yes) { 
        $.ajax({ 
         url: overlayElem.attr('href'), 
         success: function (data) { 
          $("#gridcontainer").html(data); 
         } 
        }); 
       } 
      }); 

삭제 작업 :

public ActionResult Delete(int id) 
{ 
    DeleteTeamEmployeeInput deleteTeamEmployeeInput = new DeleteTeamEmployeeInput { TeamEmployee = id }; 

    return Command<DeleteTeamEmployeeInput, TeamEmployee>(deleteTeamEmployeeInput, 
     s => RedirectToAction<EmployeeController>(x => x.Index(1)), 
     f => RedirectToAction<EmployeeController>(x => x.Index(1))); 
} 

문제는 id 매개 변수입니다. DeleteTeamEmployeeInput를 직접 사용하는 것이 좋습니다.

public ActionResult Delete(DeleteTeamEmployeeInput deleteTeamEmployeeInput) 
{ 
    return Command<DeleteTeamEmployeeInput, TeamEmployee>(deleteTeamEmployeeInput, 
     s => RedirectToAction<EmployeeController>(x => x.Index(1)), 
     f => RedirectToAction<EmployeeController>(x => x.Index(1))); 
} 

complext 개체를 사용할 때 항상 null입니다. 간단한 int 형식이 잘 작동합니다.

내 삭제 작업에 복잡한 유형을 사용하는 방법은 무엇입니까?

클래스 DeleteTeamEmployeeInput :

public class DeleteTeamEmployeeInput 
{ 
    public int TeamEmployee { get; set; } 
} 

삭제 단추 :

public static string DeleteImageButton(this HtmlHelper helper, int id) 
{ 
    string controller = GetControllerName(helper); 
    string url = String.Format("/{0}/Delete/{1}", controller, id); 

    return ImageButton(helper, url, "Delete", "/Content/Images/application_delete.png", "#yesno", "modalInput", id); 
} 

답변

1

리디렉션되기 전에 실행해야합니다. 지금까지 당신이 할 수있는 우려 (단일 TeamEmployee 정수 propertry을 포함) 전체 개체를 보내는 등 :

<a href="<%: Url.Action("delete", "employee", new { TeamEmployee = "2" }) %>" id="link2" class="modalInput specialbutton" rel="#yesno"> 
    <img src="<%: Url.Content("~/Content/Images/application_delete.png") %>" alt="Delete" /> 
</a> 

:이 매개 변수를 포함하도록

// that selector seems strange as you don't have a button inside your anchor 
// but an <img>. You probably want to double check selector 
var buttons = $('#yesno button').click(function (e) { 
    var yes = buttons.index(this) === 0; 
    if (yes) { 
     $.ajax({ 
      url: this.href, 
      success: function (data) { 
       $("#gridcontainer").html(data); 
      } 
     // that's what I was talking about canceling the default action 
     }); 
     return false; 
    } 
}); 

를 다음 앵커를 생성을 이제 안전하게 할 수 있습니다 :

public ActionResult Delete(DeleteTeamEmployeeInput deleteTeamEmployeeInput) 
{ 
    ... 
} 

비고 : 앵커의 id="2"이 유효한 식별자 이름이 아닙니다.

+1

대단히 감사합니다. 내가 알기에, 나는 경로 데이터를 URL에 추가해야한다. 내 문제는 이제이 "new {TeamEmployee ="2 "}"generic을 만드는 방법입니다. 나는 나의 포스트를 새롭게 할 것이다. – Rookian