2011-06-02 122 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