使用隐藏输入生成表单并提交到操作

我认为这比以前简单得多。 我需要从我的数据表中的单元格中提取数据(我可以这样做),然后通过带有隐藏字段的表单提交数据,以便将变量传递给我的控制器中的操作。

除了生成表单之外,我在代码中做了类似于此的操作。

我尝试了不同的方法,无论在我的操作中访问集合时,值为null。

我的查看function:

$('#myTable').on('click', 'td', function () { var serial = table.cell(this).data(); var 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); } 

老实说,为了解决这个问题,我已经对我的代码进行了大量的修改,因此看起来非常糟糕。

任何帮助,将不胜感激。

我每次在控制器中都收到错误:Serial is NULL弹出窗口。 但是,如果我测试JQuery的值不为null,则返回正确的值。

您是否尝试将方法签名更改为以下内容?

 public ActionResult Status(string serial) 

其中serial将是您将从HTML表单传递的参数名称。

如果HTML中的参数名称为blah,则可能必须将方法签名更改为以下内容:

 public ActionResult Status(string blah) 

您的隐藏字段具有serial的name和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); }