2011-06-02 112 views
1

我有一個部分視圖(search.ascx),其中包含一個下拉列表,一個文本字段和一個提交按鈕。根據下拉列表值動態修改表單操作

當點擊提交按鈕時,我希望表單操作方法反映在下拉列表中選擇的值。

E.g.在drowpdownlist包含的值,例如:

  • Blueray

    • DVD
    • VHS

    所以,通過選擇 「VHS」,最終行動網址應爲:

    site.com/DVD?搜索= TextDefinedInTheTextField。 如何做到這一點?

    當前實現

    <% using(Html.For.BeginForm("List", "Products", FormMethod.Get)) { %> 
        <%: Html.DropDownListFor(model => model.CategoryName, Model.TopLevelCategoriesList, new {@class = "searchCategoryDropDown" })%> 
        <%: Html.TextBoxFor(x => x.SearchString, new {@class = "searchField" })%> 
        <a> 
         <input class="searchBtn" id="searchButton" type="submit" value="Søg" /> 
        </a> 
    <% } %> 
    

    與上述實施的問題是,創建生成的「形式」的標籤是靜態的,並不能反映該下拉列表值。

    任何想法?

    更新解決方案 所以,我想通了,通過使用Jquery,你可以動態地修改表單上的動作。

    $(function() { 
        $('#searchForm').submit(function() { 
        this.action = $('#searchCategory').val(); 
        return true; 
        }); 
    }); 
    
  • 回答

    1

    而是與JavaScript的,如果失敗,殘疾人等可能有它自己的問題主機的客戶端動態動作擺弄的 - 爲什麼不只是簡單的處理控制器這個動作? 它更可讀。由於您的視圖正在呈現,我假設一個單一的控制器與所有這些選項,考慮一個單一的控制器方法來處理帖子,並確定要做什麼。它的可讀性也更強。

    +0

    你說得對,我其實已經考慮過了。但是,我沒有找到任何正確的解決方案,因爲我會有很好的和清晰的URL:domain.com/DVD?search=TheMatrix。如果我應該按照您的建議進行操作,我認爲這是正確的解決方案,那麼我的網址就是:domain.com/?category=DVD&search=TheMatrix。我是對的,還是有避免這種情況的好方法? – Nima 2011-06-02 21:03:26

    +0

    如果您發佈表單,那麼您的基本URL和您的控制器方法簽名可以將參數綁定到組合框或您的模型中的名稱,或者甚至直接在您的控制器方法中直接從表單中讀取它。只要確保你的表單方法的價值是後不能得到。 – 2011-06-03 04:57:59