Ajax ASP.NETMVC3下拉列表
我正在开发一个ASP.NETMVC3Web应用程序。我的一个Razor视图包含几个文本框和一个下拉列表。当用户从下拉列表中选择一个选项时,我需要一个局部视图,或者类似的东西,以显示在下拉列表下面,最好不要回发 问题是,对于局部视图来说,这不像简单的JQuery隐藏和显示那么简单,当用户从下拉列表中选择一个选项时,我需要将他们的选项发送到控制器中的一个方法,基于该选项执行一些逻辑,然后将一些数据返回到局部视图 我对AJAX没有太多的经验,但我感觉这是我需要使用的技术,以解决我的问题 有没有人需要编写类似于我上面描述的代码?如果是这样,我需要使用AJAX吗 此外,如果有人知道任何教程或代码,我可以看看帮助,那将不胜感激 谢谢 更新 我遵循了Ryan的回答,但不幸的是我仍然有一些问题。我创建了以下JavaScript文件,然后在我的视图中引用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没有太多的经验,但我感觉这是我需要使用的技术,以解决我的问题 有没有人需要编
$(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,从表单中获取所需的数据,调用新的控制器方法,并呈现以下结果
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’,
干杯,就这样。谢谢。谢谢你的回答,非常有帮助。