3

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

4

2 回答 2

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/ 
    });
    

编辑 - 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 '没有将路由移动到其他地方。

于 2012-05-16T17:31:41.037 回答
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假设您在您的中调用了一个 Action 方法,UserController该方法返回 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); 

}
于 2012-05-16T18:03:42.603 回答