MVC 데모를 테스트하고 일부 조각을 함께 스크랩 할 수 있었지만 이제는 Html.ActionLink에 문제가 있습니다. 사용자가 ActionLink가 표시되기 전에 선택해야하는 일련의 드롭 다운 목록을 사용자에게 제공하려는 의도입니다. 그렇게하기 위해 일부 드롭 다운 목록 (선택 사항이 만들어진대로)과 ActionLink를 숨기거나 표시하기 위해 일부 JQuery를 복사했습니다. 내 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가 있습니다.
<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 :
public ActionResult Submit(int id = 0,int envid = 0) {
를 그냥 알려 주시기 다른 뭔가를 포함해야합니다.
다음은 작업 드롭 다운 목록을 채우는 방법입니다. 이것은 문제없이 작동합니다. 매개 변수를 포함하지 못하는 Submit에 대한 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