2016-12-06 69 views
0

我認爲這會比以前簡單得多。我需要從數據表中的單元格中提取數據(我可以這樣做),然後通過帶有隱藏字段的表單提交數據,以便將變量傳遞給控制器​​中的操作。用隱藏輸入生成表單並提交到動作

我在代碼中做了類似於之前的事情,除了生成表單之外。

我已經嘗試了不同的方法,並且無論什麼時候在我的操作中訪問集合時值都爲空。

我的視圖功能:

$('#myTable').on('click', 'td', function() { 
      var serial = table.cell(this).data(); 


      var form = $('<form action="@Url.Action("status")" id="hiddenform"><input type="hidden" id="serial" name="serial" value=""></form>').appendTo('body'); 
      $('.serial').val(serial); 
      form.submit(); 


     }); 

和我的控制器我解析到:

//Accept GET and POST 
    [AcceptVerbs(HttpVerbs.Get | HttpVerbs.Post)] 
    public ActionResult Status(System.Web.Mvc.FormCollection collection) 
    { 
     string serial = collection["serial"]; 

     if (serial == null || serial == "") 
      System.Windows.Forms.MessageBox.Show("Error: Serial is NULL"); 

     return View(serial); 
    } 

說實話,我已經屠殺我的代碼很多,試圖解決這個問題,所以它看起來漂亮可怕。

任何幫助,將不勝感激。

我收到錯誤:串行是NULL在我的控制器中每次彈出。但是,如果我測試JQuery的值不爲空它會返回正確的值。

+0

'$ VAL(串行);'這之後嘗試觸發(「系列。」)。當您使用代碼而不是用戶輸入來更改值時發生更改事件。 '$('。serial')。trigger('change');' – Manish

+0

@Manish執行此操作後,該值仍然爲空。 –

回答

1

您是否嘗試將方法簽名更改爲以下內容?

public ActionResult Status(string serial) 

其中serial將是您將從HTML表單傳遞的參數名稱。

如果參數名稱是胡說在HTML中,您可能需要您的方法簽名更改爲以下:

public ActionResult Status(string blah) 
0

您的隱藏字段具有序列的名稱和id屬性,但用於分配值的jQuery選擇器正在尋找一個類。嘗試#改爲由ID選擇:

$('#serial').val(serial); 

或者您可以使用jQuery AJAX POST數據到控制器:

$.post('@Url.Action("status")', { serial: table.cell(this).data() }); 

,並調整控制器期待的串行參數:

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult Status(string serial) 
{ 
    if (serial == null || serial == "") 
     System.Windows.Forms.MessageBox.Show("Error: Serial is NULL"); 

    return View(serial); 
} 
+0

你好邁克,對不起,它仍然通過這個變化後的NULL值。 –

+0

我會嘗試三件事情在這一點上: 1)使用瀏覽器開發工具來檢查網絡流量 - 是表單提交請求中發送的串行參數?它在這一點上有價值嗎?如果是的話,那麼這個問題在.NET方面。如果不是: 2)在.val()調用之前放置一個斷點或console.log。變量序列是否有值? 3)檢查$('#serial')。val();在assertion之後但在form.submit()之前使用console.log。它有價值嗎? – MikeTV

+0

使用你的替代解決方案在理論上聽起來不錯,但是在實現它之後,當JQuery執行時我收到Server 500錯誤。 –