我正在測試演示的MVC,並且設法一起廢棄了一些片段,但現在我遇到了Html.ActionLink的問題。目的是向用戶展示一系列下拉列表,他們必須在顯示ActionLink之前選擇。爲此,我複製了一些JQuery來隱藏/顯示我的下拉列表(作出選擇)和ActionLink。我向JQuery添加了一個警報來檢查我的值,並通過警報看起來很好。但是,如果我調試控制器的parm值默認爲0.我不確定要包含哪些代碼,但我會嘗試包括相關部分。我認爲這是基本的。未傳遞MVC Html.ActionLink參數值
下面是下拉列表和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隱藏/顯示和填充級聯下拉菜單。如果我需要包括別的東西只是讓我知道
public ActionResult Submit(int id = 0,int envid = 0) {
:
<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>
我的控制器有此和ID和ENVID最終被0。
以下是填充作業下拉列表的方法。這工作沒有問題。對提交的Html.ActionLink調用無法包含參數。
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);
}
你是對的。我當時認爲這是問題,但我沒有意識到這一點,因爲我從各種來源獲取代碼來解決個別問題,而無需查看大圖。我能夠得到一個按鈕和腳本來工作,但現在我懷疑我的代碼現在在哪裏。級聯下拉列表可能會使我處於錯誤的軌道上。我可能會問另一個關於如何重做頁面和避免JQuery的問題。 – pretzelb