使用隐藏输入生成表单并提交到操作
我认为这比以前简单得多。 我需要从我的数据表中的单元格中提取数据(我可以这样做),然后通过带有隐藏字段的表单提交数据,以便将变量传递给我的控制器中的操作。
除了生成表单之外,我在代码中做了类似于此的操作。
我尝试了不同的方法,无论在我的操作中访问集合时,值为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); }