Model view controller 基于dropdownlist值动态修改表单操作
我有一个局部视图(search.ascx),其中包含一个下拉列表、一个文本字段和一个提交按钮 单击submit按钮时,我希望forms操作方法在dropdownlist中反映所选的值 例如,drowpdownlist包含如下值:Model view controller 基于dropdownlist值动态修改表单操作,model-view-controller,forms,dynamic,action,Model View Controller,Forms,Dynamic,Action,我有一个局部视图(search.ascx),其中包含一个下拉列表、一个文本字段和一个提交按钮 单击submit按钮时,我希望forms操作方法在dropdownlist中反映所选的值 例如,drowpdownlist包含如下值: DVD 蓝鳐 VHS 因此,通过选择“VHS”,最终行动url应为: site.com/DVD?search=文本字段中定义的文本。 如何做到这一点 当前实施情况 <% using(Html.For.BeginForm("List", "Products",
- DVD
- 蓝鳐
- VHS
<% 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>
<% } %>
如果javascript失败、被禁用等,客户端可能会有很多问题,而不是在客户端处理动态操作——为什么不在控制器中简单地处理这个操作呢?
它更具可读性。由于您的视图是由我假设一个具有所有这些选项的单个控制器来呈现的,所以考虑单个控制器方法来处理POST并确定要做什么。那样的话可读性也会更好一些 不要在客户端处理动态操作,如果javascript失败、禁用等,客户端可能会有很多问题——为什么不干脆在控制器中处理这个操作呢?
它更具可读性。由于您的视图是由我假设一个具有所有这些选项的单个控制器来呈现的,所以考虑单个控制器方法来处理POST并确定要做什么。那样的话可读性也会更好一些 你说得对,我实际上已经考虑过了。但是,我还没有找到任何正确的解决方案,因为我会有很好的、清晰的URL,比如:domain.com/DVD?search=TheMatrix。如果我应该按照你的建议去做,我也相信这是正确的解决方案,那么我的URL应该是:domain.com/?category=DVD&search=TheMatrix。我是对的,还是有一种很好的方法可以避免这种情况?如果你发布表单,那么就有你的基本URL和你的控制器方法签名,可以将参数绑定到组合框或模型中的名称,甚至可以直接在你的控制器方法中从表单中读取它。只要确保你的表单方法值是post not get。你是对的,我实际上已经考虑过了。但是,我还没有找到任何正确的解决方案,因为我会有很好的、清晰的URL,比如:domain.com/DVD?search=TheMatrix。如果我应该按照你的建议去做,我也相信这是正确的解决方案,那么我的URL应该是:domain.com/?category=DVD&search=TheMatrix。我是对的,还是有一种很好的方法可以避免这种情况?如果你发布表单,那么就有你的基本URL和你的控制器方法签名,可以将参数绑定到组合框或模型中的名称,甚至可以直接在你的控制器方法中从表单中读取它。只需确保表单方法值为post not get。
$(function () {
$('#searchForm').submit(function () {
this.action = $('#searchCategory').val();
return true;
});
});