2011-10-06 23 views
4

背景:具有修飾的查詢字符串MVC 3刷新當前頁值

我有一個使用@ Html.RenderAction顯示在左側導航面板下拉的MVC佈局(主)視圖。此下拉菜單將顯示在網站的所有頁面上。 下拉列表包裹在表單元素中,並且在發佈表單時下拉列表發生更改。

問:

現在,一旦形式發佈,我需要連接的查詢字符串的下拉列表的值重新加載當前頁面的內容(無論頁面的用戶是目前...) 。這將意味着替換先前選擇中查詢字符串中可能已存在的值。

例子:

  1. 用戶導航到該網站的主頁:

網址:/首頁/ dropdownvalue =藍色

此時下拉列表顯示「藍'被選中。用戶將下拉列表中的值更改爲「紅色」。我需要用下面的網址重新載入頁面 -

/主頁/ dropdownvalue =紅色

  1. 在網站上的用戶移動到另一頁:

網址:/ CustomerFavorite /? dropdown =紅色

將下拉列表中的值從「紅色」更改爲「綠色」。

'CustomerFavourite'頁面應該在查詢字符串中重新加載'Green'。

我對這篇文章感到抱歉。但是,想到提供一些額外的信息來澄清問題。

謝謝。

回答

7

感謝Darin爲查詢字符串的JavaScript操作提供鏈接。但是,我想這樣一個在這裏的服務器端解決方案的我是如何實現它 -

public ActionResult _ColorSelection(ColorModel model) 
{ 
    string selectedColor = model.Color.Value; 

    // Modify Querystring params... 

    NameValueCollection querystring = 
      HttpUtility.ParseQueryString(Request.UrlReferrer.Query); // Parse QS 

    // If Querystring contains the 'color' param, then set it to selected value 
    if (!string.IsNullOrEmpty(querystring["color"])) 
    { 
     querystring["color"] = selectedColor; 
    } 
    else // Add color key to querystring 
    { 
     querystring.Add("color", selectedColor); 
    } 

    // Create new url 
    string url = Request.UrlReferrer.AbsolutePath 
         + "?" + querystring.ToString(); 

    return Redirect(url); // redirect 

} 
0

如果您使用jQuery,您可以創建一個函數將選定的值發佈到列表中。

$(document).ready(function() { 
    $("#ListId").change(function() { 
    $.ajax({ 
    url: "CustomerFavorite/Edit", 
    type: "POST", 
    data: "colour=" + $("#ListId").val(), 
    success: function (result) { 
     //Code to update your page 
     } 
    }, 
    error: function() { 

    } 
    } 
+0

裏卡德......適當respect..the問題沒有發佈,但重新加載頁面的用戶是目前與修改查詢字符串值。不過,我會使用與您提到的類似的jQuery函數來提交表單。 – andytech

+0

如果你從Controller返回一個View而不是PartialView,我想你會得到你想要的查詢字符串。 – Rikard

2

您可以嘗試使用該下拉包裹形式的GET方法:

@using (Html.BeginForm(null, null, FormMethod.Get)) 
{ 
    @Html.Action("SomeActionThatRendersTheDropDown", "SomeController") 
} 

也許整個形式包裝的行動中:

@Html.Action("SomeAction", "SomeController") 

然後在javascript中訂閱下拉列表的更改事件並觸發提交表單:

$(function() { 
    $('#DropDownId').change(function() { 
     $(this).closest('form').submit(); 
    }); 
}); 

因爲您使用了GET請求,所以會自動重新加載發送查詢字符串中下拉列表值的當前頁面。

+0

我有你的代碼中提到的確切的設置,除了表單是通過郵政(未獲取)提交。所以,如果我將表單方法更改爲'Get'...我會丟失URL中除了下拉值之外的現有查詢字符串參數。正確? – andytech

+0

@andytech,這是正確的。如果要保留現有查詢字符串參數而不是調用'.submit()'來觸發表單提交,則可以通過追加或修改包含下拉列表值的查詢字符串參數來更改'window.location.href'。這裏有一個關於在javascript中處理查詢字符串的好主意:http://stackoverflow.com/questions/901115/get-query-string-values-in-javascript –

相關問題