2010-01-19 3 views
2

У меня есть раскрывающийся список на моей главной странице, который нужно отправить обратно после изменения. После обратной передачи любая страница, инициирующая обратную передачу, должна быть повторно отображена.Просмотр главной страницы и PostBack

Мой вопрос: где я могу справиться с этим? Очевидно, что я не хочу изменять каждое действие в своем проекте ... Мое предположение заключается в том, что он может быть перенесен на другое фиксированное действие и перенаправить это действие на страницу, которая является рефериром. Я прав? Есть предположения?

Спасибо.

Джейсон

+0

Похоже, вам нужно смоделировать веб-формы в MVC. Почему бы вам не использовать веб-формы в первую очередь. –

+0

Его можно просто смутить, как он работает в MVC. –

+0

Нет. Я понимаю различия. Сайт находится в разработке, поэтому в этом конкретном случае у меня есть раскрывающийся список на каждой странице, который позволяет разработчику и тестировщику переключаться между режимами «Admin» и «User». После выбора выпадающего меню страница должна быть обновлена ​​с новым представлением, основанным на недавно выбранной роли. – Jason

ответ

1

В Site.Master я закончил тем, что вырезал раскрывающийся список в его собственной форме, которая была отправлена ​​обратно в выделенный контроллер/действие.

<% Using Html.BeginForm("ChangeRole", "Home")%> 
    <div id="roleSelector">Change Role: <%=Html.DropDownList("Role", DirectCast(ViewData.Item("Roles"), SelectList), New With {.onchange = "this.form.submit();"})%></div> 
<% End Using%> 

В контроллере я использовал следующий код, чтобы изменить режим, а затем перенаправить обратно на ссылочный URL.

<AcceptVerbs(HttpVerbs.Post)> _ 
Public Function ChangeRole() As ActionResult 
    Me.CurrentUser.SetRole(DirectCast([Enum].Parse(GetType(Models.ApplicationRoles), Me.Request.Item("Role")), Models.ApplicationRoles)) 
    Return Redirect(Request.UrlReferrer.ToString()) 
End Function 

Я не уверен, что это рекомендованный способ, но я не мог думать о другом решении.

+0

Привет, теперь через 4 года я задавал себе тот же вопрос с одним и тем же сценарием. Я мог бы только придумать эту техническую реализацию, которая выглядела немного тупой и была рада, что вы придумали ту же идею. – Michel

0

Когда Вы отправляете обратно из выпадающего списка изменить то, что вы делаете? Можете ли вы, возможно, справиться с этим в вызове jQuery, тем самым устраняя необходимость повторного отображения страницы?

+0

Я использую jQuery и ajax в других частях сайта, но в этом случае это должна быть обратная передача. По сути, выпадающее меню действует как переключение между несколькими разными ролями («Администратор», «Пользователь», «Разработчик»), который полностью изменяет вид страницы. – Jason

0

Призывы к действию Методы могут быть асинхронными, поскольку griegs говорит, что таким образом вы можете отправлять любую информацию, которая вам нужна, с помощью переключателей в метод действия без необходимости перезагрузки страницы.

Если вам необходимо обновить часть страницы, вы можете заменить ее содержимым обработанного действия. Если вы используете методы jQuery ajax, вы можете опубликовать определенную информацию в своих методах.

Например, что-то вроде этого:

$(document).ready(function() 
{ 
    $("#myRadioButton").change(function() 
    { 
     //Post to your action method, with the value of the radio button, function to call on success 
     $.post('yourActionMethodUrl', $(this).val(), function() 
     { 
      //Update some part of the page 
     }); 
    }); 
}); 

Это основано на памяти, так что вам может понадобиться, чтобы проверить синтаксис.

Смежные вопросы