2014-07-08 83 views
0

我正在測試演示的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); 
} 

回答

0

你的鏈接讓你在下拉菜單中的任何選擇之前

@Html.ActionLink("Submit", "Submit", new { id = Model.selected_job_ID, envid = Model.selected_env_ID }, new {id = "lnkSubmit" }) 

呈現在服務器端。如果selected_job_IDselected_env_ID的初始值爲零或空值,那麼這些值將被傳遞給控制器​​(查看呈現的html)。

如果您想傳遞您在下拉列表中選擇的值,您可以在下拉更改事件中修改鏈接href屬性,或者創建按鈕而不是鏈接,並在按鈕單擊事件中執行重定向基於下拉值。

+0

你是對的。我當時認爲這是問題,但我沒有意識到這一點,因爲我從各種來源獲取代碼來解決個別問題,而無需查看大圖。我能夠得到一個按鈕和腳本來工作,但現在我懷疑我的代碼現在在哪裏。級聯下拉列表可能會使我處於錯誤的軌道上。我可能會問另一個關於如何重做頁面和避免JQuery的問題。 – pretzelb

0

您需要使用JSON.stringify()

data: JSON.stringify({ id: $("#selected_app_ID").val() }), 
+0

我忘了包含填充作業列表的控制器方法。它實際上工作正常,沒有stringify()。我試圖在這裏添加SelectJobs(int id),但我無法弄清格式。只需說它可以工作並填充下拉列表。問題是試圖在Controller中運行Submit()動作的Html.ActionLink。對困惑感到抱歉。 – pretzelb