MVC - html.dropdownlist - 直接调用javascript或controller /方法?

时间:2012-05-16 17:18:51

标签: javascript asp.net asp.net-mvc asp.net-mvc-3 drop-down-menu

在我的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和类型等,它将我带到控制器/方法代码;但仍无法弄清楚如何将所选值传递给控制器​​?

2 个答案:

答案 0 :(得分:7)

Q2是Q1的答案。使用MVC时没有像Web表单中那样的事件,因此您将编写一些JavaScript来向服务器发送请求。
有(至少)两种方法:

  1. 内联事件处理程序(不推荐)

    <%=Html.DropDownList("title", Model.Titleitems, new{@onchange = "YourJsFuncHere()"} )%>

  2. 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/ 
    });
    
  3. 编辑 - 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); 

}