问题描述
|
我有一个Dropdownlist,需要在其OnChange事件上使用选定的Dropdownlist值的参数值调用控制器上的操作。
这就是我现在所拥有的。
<%= Html.DropDownList(\"series\",new SelectList((IEnumerable)ViewData[\"series\"],\"ProductId\",\"SeriesName\"),new { onchange = \"??\" })%>
我可以将列表包含在表单元素中
<form id=\"SeriesForm\" action=\"<%: Url.Action(\"S\",\"ProductSearch\",new {SeriesId = ?? }) %>\" method=\"post\">
但是如何设置SeriesId参数,该参数应该是下拉菜单的选定值?我尝试将jQuery方法附加到OnChange事件,但无法更改Url.Action方法。
谢谢,
解决方法
一种非常简单的方法是将您要调用的网址用作下拉菜单中选项的值。还有其他方法可以做到,但这是最基本的方法:
<select id=\"myList\" ...>
<% foreach (var id in ids) { %>
<option value=\"<%= Url.Action(\"Action\",\"Controller\",new { id = id }) %>\">id</option>
<% } %>
</select>
然后从jQuery中获取这样的网址:
$(\'#myList\').change(function(){
$.get($(this).val(),doOnSuccess);
});
其他执行此操作的方法:
将下拉列表包装为表单,然后在选择新项时通过jQuery将表单发布(控制器将仅以HTTP请求参数的形式接收下拉列表的值)
每次更改下拉列表时动态创建一个请求。因此,除了请求$(this).val()
之外,您还可以请求存储在某处的某些网址并将$(this).val()
作为数据部分传递::6ѭ
编辑:这是第一种选择的更详细说明(为方便起见,在Razor中完成,为清晰起见,使用了显式html(希望如此)):
<form id=\"theForm\" action=\"@Url.Action(\"A\",\"C\")\" method=\"POST\">
@Html.DropDownList(\"paramName\",theSelectListAsInTheQuestion,new { id = \"theDropDown\" })
</form>
...
public class CController : Controller {
[HttpPost]
public ActionResult A (int paramName) {
...
}
}
...
// and in jQuery
$(\'#theDropDown\').change(function(event){
var f = $(\'#theForm\');
$.post(f.attr(\'action\'),f.serialize(),onSuccess);
});