2010-05-28 4 views
0

В моем ASP.net MVC View У меня есть раскрывающийся список, который я хочу получить, чтобы получить подробную информацию о выборе и асинхронно обновить div. Мой ASPX выглядит следующим образом:ASP.net MVC Routing on Postback

<% 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> ... 

The OnChange пожары события правильно при выборе выпадающего списка, но вместо метода Подробности в моем коде позади обжига, она попадет мой метод Index. Почему метод детали не попадает в событие onchange? Мой метод Подробности() в контроллере:

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

Это немного расстраивает прямо сейчас, так как я уверен, что это просто ошибка, но не уверен, что это могло быть. Я посмотрел на источник моей странице и достаточно точно, форма выглядит, как она должна быть маршрутизации к Подробности действий:

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

Любая помощь будет оценена.

ответ

2

Это потому, что в вашем onchange обработчика, вы вызываете метод submit() на TheForm форме вместо вашей формы AJAX:

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

Дайте AJAX сформировать другой идентификатор, и использовать вместо.

+0

Спасибо, Федор, я упустил это, хороший улов! Как указать идентификатор формы в Ajax.BeginForm()? Я не вижу в качестве параметра ... –

+0

Используйте перегрузку, которая имеет аргумент 'htmlAttributes', так же, как вы делаете с' Html.BeginForm() '. Если бы мой ответ помог вам, не могли бы вы подумать о его принятии? –

+0

Fyodor, я нашел тот, который имел этот параметр, и использовал <% using (Ajax.BeginForm («Подробности», «», новые AjaxOptions {UpdateTargetId = "mpkResults"}, новый {id = "SubForm"})) {%> <% = Html.DropDownList («Документы», (IEnumerable ) ViewData ["Docs"], new {onchange = "document.getElementById ('SubForm'). Submit();"})%> Он генерирует правильный HTML теперь с помощью «SubForm», но метод Index() все еще вызывается. Я с радостью помету ваш, как ответ, но хотел бы, чтобы метод Details получил выполнение, то есть подтверждение того, что оно работает –