1

我有一个具有这种格式的表格:

  1. 我是第一行(文本框)[提交按钮]
  2. 我是第二排(单选按钮)[提交按钮]
  3. 我是第三行(复选框)[提交按钮]
  4. 我是第四行(下拉)[提交按钮]
  5. 我是第五行(文本框)[提交按钮]
  6. 我是第六行(文本框)[提交按钮]
  7. 我是第七排(单选按钮)[提交按钮]

文本(例如:我是第四行)和控件的值将从数据库中加载。我希望提交按钮仅将其控件的值(例如:第 4 行,下拉值 == N/A)发送到服务器。并非所有控件的值。

现在我必须用 Html.BeginForm 包装每一行,还是可以用一个 Html.BeginForm 包装所有行?处理这种事情的最佳(甚至更好)方法是什么。

注意:我已经搜索过 SO 并没有看到像这样讨论过的问题。

4

4 回答 4

1

听起来你需要创建一个循环来构建你的表..并有条件地根据您键入的内容创建行以决定放置特定的元素类型(文本、单选、复选框等)和每个行将必须包装在表单标签中。由于您需要评估正确的元素,因此您还可以使用它来构建您的 BeginForm 来告诉它在哪里发布操作,可能每个元素类型都有不同的操作,以便操作只接收您希望它接收的数据

于 2012-04-27T14:13:49.163 回答
1

我相信您可以使用 Jquery 做到这一点:首先为每一行创建单独的表单。尝试使用下面的代码.. Jquery:

function SubmitForm(btn)
{
     var form = btn.serialize();
     $.post("your  URL here",form,function() {
         alert("Saved");
     });
}

html:

<form id='form1' >
 ...
 Other controls on your form
 ...
<input type="button" id="form1" onclick="SubmitForm(this)" />
</form>
于 2012-04-27T14:32:44.240 回答
0

首先,您不能嵌套表单标签(浏览器不支持它)。

点击时的 input[type=submit] 会在其父表单上触发回发事件。前任。

<form action='/PostBackTo' onsubmit='DoSomething()'>
<input type='submit />
</form>

因此,您必须将每个控件包装在其自己的表单中,并且您想要回发的任何其他数据都需要驻留在表单内的输入或选择标签中。

假设您想在每次提交时回发一个 id,您必须添加

<input type='hidden' value='@id' />

在每个表单标签内将其包含在回发中。

我建议如果您这样做,请使用 javascript 拦截提交操作并通过 AJAX 发布提交表单的数据(如果它类似于“保存更改”按钮)。

于 2012-04-27T14:16:54.933 回答
0

例如: 1. 我是第一行:

<input type="text" value="@textValue" id="txtFirstRow" />
<input type="button" onclick="post('txtFirstRow');" />

Javascript代码:

function post(name)
{
    var txt = document.getElementById(name).value;
    $.getJSON("/Controller/Action",
    {
        text: txt
    },
    function (data) {
        //returned result
    });
}
于 2012-04-27T14:24:10.753 回答