如何在ASP.NET MVC中仅提交(大)表单的一部分?

时间:2014-10-13 22:14:39

标签: c# asp.net-mvc asp.net-mvc-3

我有一个模型,它是一个对象列表,我将其渲染到表单内的页面。 用户使用复选框选择对象,点击提交,模型回发,我对所选项目执行一些处理。

@using (Html.BeginForm("Method", "Controller"))
{
<table id="mytable">
    <tr>
        <th>Some Properties</td>
        <th>Selected</td>
    </tr>

@foreach (var item in Model)
    <tr>
        @Html.HiddenFor(m => item.Id)
        <td>@item.Id</td>
        <td>@Html.CheckBoxFor(m => item.Selected)</td>
    </tr>
</table>
<input id="btnGo" type="submit" name="submitButton" value="Go"/>        
}

(基本上就是这样。我实际上并不认为以上是有效的 - 我必须将其分开,以便这部分内容在局部视野中 - 但我还是确定你明白了。)

通常没有很多行,但有时会有很多行。

当它变得非常高(2000加)时,即使用户只勾选1个框,也可能需要 10分钟来回发整个模型,当不需要99.9%时。

我如何仅从模型中提交相关(已检查)项目?

我能让它工作的唯一方法就是只提交一些javascript来强制它进入网址。

$(document).ready(function () {
    $('#btnGo').click(function () {
        var idArray = new Array();
        $("#mytable input:checkbox:checked").each(function () {
            idArray.push(this.id);
        });
        window.location = "/My.Web.Page/Controller/Method?selectedIds=" + idArray;
    });
});

但我不喜欢它,因为我不得不对网址进行硬编码,用户只需点击“刷新”即可。然后在浏览器上基本上重新处理所有内容。

1 个答案:

答案 0 :(得分:3)

好吧,只使用html你不能做部分回发。如果您只需要回发一些数据,则应使用Ajax。

顺便说一下,对2000件物品进行10分钟处理?你在做什么数据?!