我有一个具有以下格式的表单:
文本(例如:我是第四行)和控件的值将从数据库加载。我希望“提交”按钮仅将其控件的值(例如:第4行,下拉值== N / A)发送到服务器。并非所有控件的值。
现在我必须使用Html.BeginForm包装每个行,还是可以用一个Html.BeginForm包装所有行?什么是最好(或甚至更好)的方式来处理这样的事情。
注意:我在SO周围搜索过,并没有看到像这样讨论的问题。
答案 0 :(得分:1)
听起来你需要创建一个循环来构建你的表..并根据你所依赖的任何东西有条件地创建行来决定放置一个特定的元素类型(文本,广播,复选框等等。 )并且每行必须包装在表单标签中。由于您需要评估正确的元素,您可以使用它来构建您的BeginForm以告诉它在哪里发布到操作,可能每个元素类型可能有不同的操作,以便该操作仅接收您希望它接收的数据
答案 1 :(得分: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>
答案 2 :(得分:0)
首先,你不能嵌套表格标签(浏览器不支持它)。
点击时输入[type = submit]会在其“父表单”上触发回发事件。 离。
<form action='/PostBackTo' onsubmit='DoSomething()'>
<input type='submit />
</form>
因此,您必须将每个控件都包含在自己的表单中,并且您希望发回的任何其他数据都需要驻留在表单内的输入或选择标记中。
假设您想在每次提交时回复一个ID,您必须添加
<input type='hidden' value='@id' />
在每个表单标记内部将其包含在回发中。
我建议如果你这样做,使用javascript拦截提交动作并通过AJAX帖子提交表格的数据(如果它类似于'保存更改'按钮)。
答案 3 :(得分: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
});
}