2010-01-19 46 views
2

我的主頁面上有一個下拉列表,需要在更改後回發。回發之後,無論發起什麼頁面,回發都需要重新顯示。查看主頁面和回傳

我的問題是我在哪裏處理?顯然,我不想修改我的項目中的每個Action ...我的猜測是可能回發給其他固定操作,並將該操作重定向回引用者的頁面。我對麼?有什麼想法嗎?

謝謝。

Jason

+0

看起來你需要模擬MVC中的Web窗體。爲什麼不首先使用Web窗體。 – 2010-01-19 22:46:56

+0

他可能會對MVC中的工作方式感到困惑。 – 2010-01-19 22:48:36

+0

不,我明白不同之處。該網站正在開發中,所以在這種情況下,我在每個頁面上都有一個下拉菜單,允許開發人員和測試人員在「管理員」模式和「用戶」模式之間切換。在選擇下拉菜單後,需要根據新選擇的角色使用新視圖刷新頁面。 – Jason 2010-01-21 22:58:44

回答

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 2014-05-21 20:08:18

0

當您從下拉列表中回覆更改時,您在做什麼?你可以在jQuery調用中處理這個問題,從而不需要重新顯示頁面呢?

+0

我在網站的其他部分使用jQuery和ajax,但在這種情況下,它需要是回發。實質上,下拉菜單充當幾個不同角色(「Admin」,「User」,「Developer」)之間的切換,它可以完全改變頁面視圖。 – Jason 2010-01-21 23:02:55

0

呼籲行動方法可以是異步的,因爲這樣,你可以發佈你需要從單選按鈕的任何信息到一個行動方法,而無需重新加載頁面。

如果您需要更新頁面的一部分,可以將其替換爲呈現的操作方法的內容。如果您使用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 
     }); 
    }); 
}); 

這是基於內存,所以你可能需要檢查語法。