MVC下拉列表onchange传递选定的值到控制器中的函数并执行它
本文关键字:控制器 函数 执行 onchange MVC 下拉列表 | 更新日期: 2023-09-27 18:18:43
我是使用MVC3 Razor语法的新手,我有一个包含下拉列表的视图,我想当用户改变它的值时,控制器中的函数将选择值作为参数自动执行。这是我在视图中编写的代码运行时,这一行出现了编译错误:
@Html.DropDownList("DONOR_BLOOD_GROUPE_ID", "--Select--", new {onchange="FilterdIndex(this.value)"})
"DONOR_BLOOD_GROUPE_ID"在viewBag中,这是我想要调用的控制器中的函数。
public ViewResult FilterdIndex(int id)
{
var donor = db.DONOR.Include(d => d.BLOOD_GROUP);
var DONOR_BLOOD_GROUPE_ID = from BG in db.BLOOD_GROUP
select new
{
BG.GROUP_ID,BG.GROUP_NAME,
Checked=(BG.GROUP_ID==id)
};
ViewBag.DONOR_BLOOD_GROUPE_ID = DONOR_BLOOD_GROUPE_ID;
return View(donor.ToList());
}
这是javascript代码,它正确地执行控制器函数,但我不知道为什么在返回到视图后,我在这一行有错误MSG:
DONOR_BLOOD_GROUPE.error = function () { alert("Error in Getting States!!"); };
这是整个函数:
<script src="~/Scripts/jquery-1.7.1.min.js" type="text/javascript"></script>
<script src="~/Scripts/jquery-1.7.1.js" type="text/javascript"></script>
$(document).ready(function () {
$("#DONOR_BLOOD_GROUPE_ID").change(function () {
if ($("#DONOR_BLOOD_GROUPE_ID").val() != "Select") {
var DONOR_BLOOD_GROUPE = {};
DONOR_BLOOD_GROUPE.url = '@Url.Action("FilterdIndex", "DONOR")';
DONOR_BLOOD_GROUPE.type = "POST";
DONOR_BLOOD_GROUPE.data = JSON.stringify({ id: $("#DONOR_BLOOD_GROUPE_ID").val() });
DONOR_BLOOD_GROUPE.datatype = "html";
DONOR_BLOOD_GROUPE.contentType = "application/json";
DONOR_BLOOD_GROUPE.error = function () { alert("Error in Getting States!!"); };
$.ajax(DONOR_BLOOD_GROUPE);
}
});
});
</script>
,这是在"DONOR[dynamic]"文件
中导致异常的行<select AutoPostBack="True" id="DONOR_BLOOD_GROUPE_ID" name="DONOR_BLOOD_GROUPE_ID" onchange="FilterdIndex(this.value)"><option value="">--Select--</option>
我假设你来自WebForms背景,这种事情发生的所有时间与'事件',可悲的是,这不是MVC的工作方式。
要做你想做的事情,你需要为下拉菜单的onchange事件创建一个jquery方法,然后异步post到你的控制器。
看一下这个教程,它会给你指明正确的方向http://www.c-sharpcorner.com/UploadFile/4b0136/working-with-dropdownlist-in-mvc-5/
嗨,Asmaa Rashad,你可以尝试使用这种方式,你使用Ajax调用的动作方法必须是JsonResult类型。
<script type="text/javascript">
$(document).ready(function () {
$("#DONOR_BLOOD_GROUPE_ID").change(function () {
$.ajax({
type: 'POST',
url: '@Url.Action("FilterdIndex", "DONOR")',
dataType: 'json',
data: { id: $("#DONOR_BLOOD_GROUPE_ID").val() },
success: function (data) {
},
error: function (ex) {
alert('Failed to retrieve + ex);
}
});
return false;
})
});
</script>
作为参考,你可以查看这个博客creat-simpl-cascade - dropdownlist-inmvc -4 using-razor