在我的MVC应用程序中,我的视图中有一个html.dropdownlist。选择更改后 - 我希望将值传递给控制器中的方法(返回类似列表或JsonResult的东西)。
Q1:我该怎么做?
<%=Html.DropDownList("title", Model.Titleitems, "" )%>
Q2:这是一个好习惯(在视图中直接使用控制器/方法名称)还是应该编写JavaScript函数并从JavaScript函数内部调用适当的控制器/方法?在这种情况下,如何为上面的html.dropdownlist控件编写Onchange或OnSelectionChanged事件?
编辑:
par1是我想要传递给此控制器/方法的下拉列表选择值..
public ActionResult GetMethod(string Par1)
{
//My code here
return Json(varValue, JsonRequestBehavior.AllowGet);
}
现在我有关于更改的下拉列表将我带到JavaScript函数(根据marteljn建议),在JavaScript函数中,我有.ajax调用指定URL和类型等,它将我带到控制器/方法代码;但仍无法弄清楚如何将所选值传递给控制器?
答案 0 :(得分:7)
Q2是Q1的答案。使用MVC时没有像Web表单中那样的事件,因此您将编写一些JavaScript来向服务器发送请求。
有(至少)两种方法:
内联事件处理程序(不推荐)
<%=Html.DropDownList("title", Model.Titleitems, new{@onchange = "YourJsFuncHere()"} )%>
JQuery方式,
$("#title").bind("change",function(){
//Your Code
//Use .on instead of bind if you are using JQuery 1.7.x or higher
//http://api.jquery.com/on/
});
编辑 - AJAX代码
$.ajax({
"url": "/Controller/Action/" + $("#title").val(),
"type": "get",
"dataType" : "json",
"success": function(data){
//Your code here
//data should be your json result
}
});
将GetMethod(string Par1)
更改为GetMethod(string id)
或更改默认路线以反映Par1
参数。
此外,如果它没有达到您的断点,则可能1)AJAX请求未被启动(使用firebug查看它是否是)2)您的路由配置不正确(查看Global.asax.cs,如果你还没有把路由移到其他地方。
答案 1 :(得分:2)
$(function(){
$("#title").change(function(){
var selectedVal=$(this).val();
$.getJSON("UserController/YourAction",{ id: selectedVal} , function(result ){
//Now you can access the jSon data here in the result variable
});
});
});
假设您的YourAction
中有一个名为UserController
的Action方法,它返回JSON
public ActionResult YourAction(int id)
{
//TO DO : get data from wherever you want.
var result=new { Success="True", Message="Some Info"};
return Json(result, JsonRequestBehavior.AllowGet);
}