2010-05-28 5 views
0

내 ASP.net MVC보기에서 선택 항목을 가져오고 비동기 적으로 div를 업데이트하려고하는 드롭 다운이 있습니다. 드롭 다운의 선택에 제대로포스트 백에서 ASP.net MVC 라우팅

<% using (Html.BeginForm("Index", "Portal", FormMethod.Post, new { id = "TheForm" })) 
    {%> 

    <h2>Index</h2> 

    <% using (Ajax.BeginForm("Details", new AjaxOptions { UpdateTargetId = "mpkResults" })) 
     { %> 

    <%=Html.DropDownList("Docs", (IEnumerable<SelectListItem>)ViewData["Docs"], 
     new { onchange = "document.getElementById('TheForm').submit();" })%> 

    <p><input type="submit" value="Details" /></p> 

    <% } %> 

    <div id="mpkResults" style="margin:10px 0px 0px 0px;"></div> ... 

onchange를 이벤트가 발생을 대신 발사 뒤에 내 코드의 세부 방법, 그것은 내 색인 방법 안타 다음과 같이 내 영문입니다. onchange 이벤트에서 세부 정보 메서드가 적용되지 않는 이유는 무엇입니까? 컨트롤러에서 나의 상세 정보() 메소드는 다음과 같습니다

public ActionResult Details() 
    { 
     ... < It never gets here, just goes to the index() method 
    } 

나는 그것이 단순한 실수 만이 할 수있는 것을 확실하지 확신 이후 지금 조금 실망입니다. 내 페이지의 소스에보고하고 세부 작업에 라우팅해야처럼 과연, 양식 같습니다

<form action="/Portal/Details" method="post" ... 

어떤 도움을 주시면 감사하겠습니다.

답변

2
당신의 onchange 핸들러에서, 당신은 대신 AJAX 형태의 TheForm 양식의 submit() 메소드를 호출하고 있기 때문이다

:

new { onchange = "document.getElementById('TheForm').submit();" })%> 
               ^^ wrong form ID 

당신의 AJAX가 다른 ID를 형성주고, 사용 대신에.

+0

감사합니다. Fyodor, 나는 그것을 간과했습니다. Ajax.BeginForm()에서 양식 ID를 어떻게 지정합니까? 나는 그것을 매개 변수로 보지 않는다 ... –

+0

'Html.BeginForm()'과 마찬가지로'htmlAttributes' 인자를 가진 오버로드를 사용한다. 내 대답이 당신을 도왔다면, 받아들이시겠습니까? –

+0

Fyodor, 그 매개 변수를 가진 하나를 찾았습니다. <% using (Ajax.BeginForm ("Details", ""새로운 AjaxOptions {UpdateTargetId = "mpkResults"}, 새로운 {id = "SubForm"})) {% = {% = Html.DropDownList ("Docs", (IEnumerable ), ViewData [ "Docs"], 새 {onchange = "document.getElementById ('SubForm') %> "SubForm"을 사용하여 올바른 HTML을 생성하지만 Index() 메서드가 여전히 호출되고 있습니다. 기꺼이 답으로 표시 하겠지만 세부 정보 메서드가 실행되는지 확인하고 싶습니다. 즉 작동 확인입니다. –