Ajax ASP.NETMVC3下拉列表

Ajax ASP.NETMVC3下拉列表,ajax,asp.net-mvc-3,jquery,asp.net-ajax,Ajax,Asp.net Mvc 3,Jquery,Asp.net Ajax,我正在开发一个ASP.NETMVC3Web应用程序。我的一个Razor视图包含几个文本框和一个下拉列表。当用户从下拉列表中选择一个选项时,我需要一个局部视图,或者类似的东西,以显示在下拉列表下面,最好不要回发 问题是,对于局部视图来说,这不像简单的JQuery隐藏和显示那么简单,当用户从下拉列表中选择一个选项时,我需要将他们的选项发送到控制器中的一个方法,基于该选项执行一些逻辑,然后将一些数据返回到局部视图 我对AJAX没有太多的经验,但我感觉这是我需要使用的技术,以解决我的问题 有没有人需要编

我正在开发一个ASP.NETMVC3Web应用程序。我的一个Razor视图包含几个文本框和一个下拉列表。当用户从下拉列表中选择一个选项时,我需要一个局部视图,或者类似的东西,以显示在下拉列表下面,最好不要回发

问题是,对于局部视图来说,这不像简单的JQuery隐藏和显示那么简单,当用户从下拉列表中选择一个选项时,我需要将他们的选项发送到控制器中的一个方法,基于该选项执行一些逻辑,然后将一些数据返回到局部视图

我对AJAX没有太多的经验,但我感觉这是我需要使用的技术,以解决我的问题

有没有人需要编写类似于我上面描述的代码?如果是这样,我需要使用AJAX吗

此外,如果有人知道任何教程或代码,我可以看看帮助,那将不胜感激

谢谢

更新

我遵循了Ryan的回答,但不幸的是我仍然有一些问题。我创建了以下JavaScript文件,然后在我的视图中引用

$(document).ready(function () {

$("#myDDL").change(ChangeEventOfDDL);

function ChangeEventOfDDL(){
var dropDownValue = $('#myDDL').val();
//alert(dropDownValue);
$.ajax({ type: "GET",
       url: '@Url.Action("SomePartialView","testAjax")',
       data: {
           id: dropDownValue
       },
       success: function(data) {
             $('#someDivToLoadContentTo').html(data);
       }
    });
}

});
看法

然而,我的方法“SomePartialView”从未被击中。有人知道为什么吗


谢谢。

是的,在这里使用Ajax是最简单的。这里有很多好的Ajax教程,请记住Ajax实际上是一篇背景文章,所以除了在现有页面中之外,您可以使用MVC完成所有正常操作

我实现这一点的方法是让您的代码如下所示:

public class SomeController{
    public ActionResult SomePartialView(){
         // Do some logic
         return View("SomePartial");
    }
}
$("#yourDIV").load('/area/controller/method', { property1: 'asasd', property2: 'asdasdadfa'})
您的Ajax将类似于:

function ChangeEventOfDDL(){
    $.ajax({
           url: '@Url.Action("SomePartialView","Some")',
           success: function(data) {
                 $('#someDivToLoadContentTo').html(data);
           }
    });
}
我希望这至少有一点帮助

使用Ajax的关键是,您可以向函数添加数据对象,该对象作为查询字符串传递。这意味着您可以使用ajax非常轻松地从页面发送值。使用上述示例,Javascript将是:

function ChangeEventOfDDL(){
    var dropDownValue = $('#ddl').val();
    $.ajax({
           url: '@Url.Action("SomePartialView","Some")',
           data: {
               id: dropDownValue
           }
           success: function(data) {
                 $('#someDivToLoadContentTo').html(data);
           }
    });
}
Id值与MVC类中方法的参数相链接:

public class SomeController{
    public ActionResult SomePartialView(int id){
         // Do some logic 
         var model = MakeModelWithSupplierId(id);
         return View("SomePartial",model);
    }
}

这里有一个交互式局部视图,其中填充了下拉列表中的值。

这是一个常见的用例

你需要做的是

  • 创建一个可以获取所需参数的控制器方法(在执行此操作之前,请阅读有关MVC模型绑定的内容)
  • 编写javascript,从表单中获取所需的数据,调用新的控制器方法,并呈现以下结果
在jQuery中是这样的:

public class SomeController{
    public ActionResult SomePartialView(){
         // Do some logic
         return View("SomePartial");
    }
}
$("#yourDIV").load('/area/controller/method', { property1: 'asasd', property2: 'asdasdadfa'})

此调用的第二个参数应基于从表单中获取的数据进行准备。(如果您不知道如何操作,那么就学习javascript)

由于控制器也可以返回局部视图,因此您可以执行以下操作:

$('#idofyourdropdown').change(function () {
 var theValue = $(this).val();

  $.post('@Url.Action("Action","Controller")', {nameOfParameter: theValue, function(data) {
     $('#divWhereYouWantToAttachData').html(data);
  });
});

在下拉列表的
change
事件中,将所选值发送到所需的控制器操作,控制器操作将其传递到局部视图并返回渲染的html。html在
数据
变量中接收,并且可以附加到dom,无论您想在哪里(请参阅jQuery文档了解这一点)。

如果您必须担心回退,那么您应该使用;否则,我将使用Ryan.Super-answer提供的jQuery解决方案。我非常感谢你在我的问题上花费的时间和精力。再次感谢。你能看看我最新的问题吗?不幸的是,我对你的答案有些疑问。谢谢。问题是你把代码放在一个单独的JS文件中。代码
@Url.Action(“SomePartialView”,“testAjax”)
是Razor代码,请尝试将其更改为站点的实际Url,因此
Url:'http://www.yoursite.com/Some/SomePartialView’,
干杯,就这样。谢谢。谢谢你的回答,非常有帮助。