Asp.net mvc 4 MVC避免查询字符串,url太长

Asp.net mvc 4 MVC避免查询字符串,url太长,asp.net-mvc-4,checkbox,input,query-string,Asp.net Mvc 4,Checkbox,Input,Query String,我有一个带有复选框的表格,其中包含许多联系人列表,复选框用于他们选择要显示在下面文本框中的特定联系人。我的问题是,当我尝试单击“添加”按钮时,它会抛出一个错误,即我的url太长,主要是因为它似乎试图通过querystring解析每个输入。。有没有其他方法可以让这一切顺利进行 视图: 除非您对JS有什么理由,否则请查看asp.NETMVC已经内置了什么。您的控制器操作方法将某种类型的集合作为参数,并且您可以使用带有索引值的for not foreach循环html 看看这首老歌,但是很好: 您能显

我有一个带有复选框的表格,其中包含许多联系人列表,复选框用于他们选择要显示在下面文本框中的特定联系人。我的问题是,当我尝试单击“添加”按钮时,它会抛出一个错误,即我的url太长,主要是因为它似乎试图通过querystring解析每个输入。。有没有其他方法可以让这一切顺利进行

视图:


除非您对JS有什么理由,否则请查看asp.NETMVC已经内置了什么。您的控制器操作方法将某种类型的集合作为参数,并且您可以使用带有索引值的for not foreach循环html

看看这首老歌,但是很好:

您能显示或@Html.BeginForm。。。视图的一部分?为什么要用JavaScript填充两个隐藏字段,而不是简单地通过post提交表单?@DavidG its在表的顶部我使用JavaScript在列表中保留以前添加的联系人。因为每次我添加一个新联系人时,get方法都会触发,它会删除文本框中以前添加的联系人。如果我知道您想创建一条消息,发送给列表中所有您选择正确的联系人?那么您是否要提交到CreateMessage操作方法?是。我正在创建一个类似outlook的表单。我的tblcontacts在一个手风琴窗格中,每次启动add按钮时,createmessage的get方法都会启动。不是在计算机上,所以我会尽全力。将CreateMessage参数更改为Contacts[]Contacts。在razor中,将foreach更改为,以确保引用此联系人[i].selected等项。表单提交时,将拉出数组中selected=true的所有行。然后,您可以在action方法中构建字符串,并返回在文本字段中使用该值。没有拦截JS提交。
 <table id="tblcontacts>
            <tr>
                <th colspan="1">
                    <input type="checkbox" id="checkall" /><span>Select All</span>
                </th>
                <th colspan="2"></th>
            </tr>
            <tr>
                <th>
                    @Html.DisplayNameFor(model => model.contacts.First().Selected)
                </th>
                <th>
                    @Html.DisplayNameFor(model => model.contacts.First().ContactName)
                </th>
                <th>
                    @Html.DisplayNameFor(model => model.contacts.First().ContactNo)
                </th>

            </tr>
            @foreach (var item in Model.contacts)
            {
                <tr>
                    <td style="text-align: center">
                        @Html.CheckBoxFor(modelItem => item.Selected)
                    </td>
                    <td id="contactname">
                        @Html.DisplayFor(modelItem => item.ContactName)
                    </td>
                    <td id="contactnos">
                        @Html.DisplayFor(modelItem => item.ContactNo)
                    </td>

                </tr>
            }
        </table>

  @* Populate Contacts via Jquery(Commonscript.js) during add click *@
    <input id="hfContacts" name="hfContacts" type="hidden" />
    <input id="hfContactnos" name="hfContactnos" type="hidden" />
    <div class="buttons">
        <input id="btnadd" type="submit" value="Add" />
    </div>
$('#btnadd').click(function () {
    //get txtMessageTo value
    contactname = $('#txtMessageTo').val() || "";

    if (contactname != "")
        contactname += ',';

    //check <tr> for checked status where <td id="contact">
    $('#tblcontacts tr').filter(':has(:checkbox:checked)').children('#contactname').each(function () {
        thisContact = $(this);
        // Checks if contact was previously added already.
        if (!(contactname.indexOf($.trim(thisContact.text())) > -1))
            contactname += $.trim(thisContact.text()) + ',';
    });

    $('#hfContacts').val(contactname);
});
public ActionResult CreateMessage(string hfContacts, string hfContactnos)

//adds contacts to model to be displayed on a separate textbox form