在ASP.NET MVC中使用jQuery发布表单元素无法正常工作

时间:2013-02-25 08:01:37

标签: javascript jquery asp.net html asp.net-mvc

我正在使用ASP.NET MVCjQuery

我有一个文本框和一个包含数据的HTML表格,例如:

<form action="/Server/Test" method="post">

     <input type="text" id="ServiceAccount" />

     <table>
          <tr>
               <th>Heading 1</th>
               <th>Heading 2</th>
          </tr>
          <tr>
               <td>Cell data 1</td>
               <td>Cell data 2</td>
          </tr>
     </table>

</form>

上表未绑定到视图模型,它通过AJAX / JSON填充。

我需要将文本框的值和单元格数据发布到控制器的操作方法中。因此,如果我在文本框中键入1234567,那么我需要将此值与表的内容一起发布到action方法。我还需要表数据进行处理。这可能吗?我找不到样品。

我的行动方法如下:

[HttpPost]
public ActionResult Test(string[] data)
{
     // Use the value Cell data 1
     // Use the value Cell data 2

     return View();
}

鉴于我的代码如下,它没有达到我的操作方法:

$('form').submit(function () {
     $.post('@Url.Action("Test", "Server")', $('form').serialize(), function (data) {
          alert('success');
     });
     return false;
});

我不明白我做错了什么。

3 个答案:

答案 0 :(得分:0)

I need the value of the textbox and the cell data to be posted to my controller's action method. So if I typed in 1234567 in the textbox then I need this value posted to the action method together with the contents of the table. I need the table data also for processing. Is this possible? I can't find a sample.

是的,这是可能的,但您的表格必须包含隐藏的输入,trtd数据无法通过提交(正常提交,而不是ajax)发送,serialize()也可以不序列化表行。看看这个问题:

How to submit a table with dynamic rows of data via asp.net mvc or jquery?

答案 1 :(得分:0)

基本上,当您提交表单时,仅提交INPUT,Hidden,TextAra等表单元素,NOT div,table,span等。

如果要提交,请使用表格数据的隐藏字段。

或者更好的方法是循环表数据,准备JSON并将其作为参数发布。

$('form').submit(function () {

     var myPostData=//construct this from table and convert as JSON
     $.post('@Url.Action("Test", "Server")', {data:myPostData}, function (resp) {
          alert('success');
     });
     return false;
});

答案 2 :(得分:0)

在控制器操作方法中设置WebMethod

[WebMethod]
[HttpPost]
public ActionResult Test(string[] data)
{
     // Use the value Cell data 1
     // Use the value Cell data 2

     return View();
}