我认为这比以前简单得多。我需要从我的数据表中的单元格中提取数据(我可以这样做),然后通过带有隐藏字段的表单提交数据,以便将变量传递给我的控制器中的操作。
我在代码中做了类似的事情,除了生成表单。
我尝试了不同的方法,无论在我的操作中访问集合时,值为null。
我的观看功能:
$('#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);
}
老实说,为了解决这个问题,我已经对我的代码进行了大量的修改,因此看起来非常糟糕。
任何帮助都将不胜感激。
我每次在控制器中收到错误:Serial is NULL弹出窗口。但是,如果我测试JQuery的值不为null,则返回正确的值。
答案 0 :(得分:1)
您是否尝试将方法签名更改为以下内容?
public ActionResult Status(string serial)
其中serial将是您将从HTML表单传递的参数名称。
如果HTML中的参数名称为blah,则可能需要将方法签名更改为以下内容:
public ActionResult Status(string blah)
答案 1 :(得分:0)
您的隐藏字段具有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);
}