MVC Html.没有传递ActionLink参数值
MVC Html.ActionLink parameter values not being passed
我正在测试MVC的演示,我设法拼凑一些碎片,但现在我有一个Html.ActionLink的麻烦。这样做的目的是向用户展示一系列下拉列表,用户必须在ActionLink显示之前选择这些下拉列表。为了做到这一点,我复制了一些JQuery来隐藏/显示我的下拉列表(作为选择)和ActionLink。我在JQuery中添加了一个警报来检查我的值,通过这个警报,一切看起来都很好。但是,如果我调试控制器,parm值默认为0。我不确定要包括什么代码,但我会尽量包括相关部分。我想这是最基本的。
下面是下拉列表和ActionLink。
@Html.DropDownListFor(m => m.selected_env_ID, new SelectList(Model.Environments, "env_ID", "env_DESC"), "*Select an environment")
@Html.DropDownListFor(m => m.selected_app_ID, new SelectList(Model.Applications, "app_ID", "app_DESC"), "*Select an application",new { @hidden = "hidden" })
@Html.DropDownListFor(m => m.selected_job_ID, Enumerable.Empty<SelectListItem>(), "*Select a job", new { @hidden = "hidden" })
@Html.ActionLink("Submit", "Submit", new { id = Model.selected_job_ID, envid = Model.selected_env_ID }, new {id = "lnkSubmit" })
这是一个复杂的JQuery隐藏/显示和填充级联下拉列表。
<script>
$(document).ready(function ()
{
//Dropdownlist Selectedchange event
$("#selected_app_ID").change(function () {
var id = $('#selected_app_ID').val(); // id value
if (id == 0) {
$('#selected_job_ID').hide();
} else {
$('#selected_job_ID').show();
$("#selected_job_ID").empty();
$.ajax({
type: 'POST',
url: '@Url.Action("SelectJobs")',
dataType: 'json',
data: { id: $("#selected_app_ID").val() },
success: function (jobs) {
// jobs contains the JSON formatted list of jobs passed from the controller
$("#selected_job_ID").append('<option value=0>*Select a job</option>');
$.each(jobs, function (i, job) {
$("#selected_job_ID").append('<option value="'
+ job.job_ID + '">'
+ job.job_DESC + '</option>');
});
},
error: function (ex) {
alert('Failed to retrieve jobs.' + ex);
}
});
}
return false;
});
//ddl select change
$("#selected_env_ID").change(function () {
var name = $('#selected_env_ID option:selected').text(); //Item1
var id = $('#selected_env_ID').val(); // id value
if (id == 0) {
$('#divSubmit').hide();
$('#selected_app_ID').hide();
$('#selected_job_ID').hide();
} else {
$('#selected_app_ID').show();
}
});
//ddl select change
$("#selected_job_ID").change(function () {
var name = $('#selected_job_ID option:selected').text(); //Item1
var id = $('#selected_job_ID').val(); // id value
var envid = $('#selected_env_ID').val(); // id value
if (id == 0) {
$('#divSubmit').hide();
} else {
$('#divSubmit').show();
alert("envid=" + envid + " jobid=" + id);
}
});
}); // end document ready
</script>
我的控制器有this id和envid最后都是0
public ActionResult Submit(int id = 0,int envid = 0) {
如果我需要添加其他内容,请告诉我。
下面是填充作业下拉列表的方法。这工作没有问题。这是Html。
public JsonResult SelectJobs(int id)
{
db.Configuration.ProxyCreationEnabled = false;
IEnumerable<t_job> jobs = db.t_job.Where(j => j.app_ID == id).ToList();
return Json(jobs);
}
您的链接
@Html.ActionLink("Submit", "Submit", new { id = Model.selected_job_ID, envid = Model.selected_env_ID }, new {id = "lnkSubmit" })
在您在下拉菜单中进行任何选择之前呈现在服务器端。如果selected_job_ID
和selected_env_ID
的初始值为0或null,那么这些值将被传递给控制器(请查看渲染的html)。
如果你想传递下拉菜单中选择的值,你可以修改下拉菜单更改事件中的links href属性,或者创建一个按钮而不是一个链接,并根据下拉菜单的值在按钮单击事件中进行重定向。
您需要使用JSON.stringify():
data: JSON.stringify({ id: $("#selected_app_ID").val() }),
相关文章:
- 函数参数中的数据与指定变量之间的任何性能差异
- 使用Express捕获参数
- 参数变量出现ngTable指令问题
- AngularJS:我可以跳过函数参数回调吗
- 如何使用skip参数使用angular ui引导进行服务器端分页
- 要求未定义JS回调参数
- 我的jQuery插件参数没有正确启动,遇到了问题
- 获取@ResponseBody的一部分作为主干和Spring MVC控制器之间的参数
- jquery设置为使用参数运行
- Javascript”;类“;带有参数的扩展
- 为什么grunt contrib connect的中间件选项的第三个参数是未定义的
- Ajax.ActionLink-传递javascript参数
- 使用jquery变量作为.net MVC中ActionLink的参数
- 将选定的DDL值用作actionlink的参数
- C# asp.net MVC - 使用参数从 html.actionlink 调用脚本函数
- 从Javascript更改Actionlink参数
- 如何在@Html.ActionLink中的Querystring参数中传递String
- 从Ajax ActionLink MVC3.0传递参数到Javascript方法
- 是否有任何方法在MVC4 ActionLink中调用一个RouteValue参数
- 通过传递参数从html.actionlink调用JS