Javascript 尝试将表行作为列表发布回MVC控制器<&燃气轮机;对象

Javascript 尝试将表行作为列表发布回MVC控制器<&燃气轮机;对象,javascript,asp.net-mvc,Javascript,Asp.net Mvc,对于我们的网站,我们有一个管理部分和一个用户部分。我们希望允许管理员指定在用户部分向用户列出哪些订单项目 我有一个MVC列表表,并且我已经启用了对行进行排序以实际更改排序值。但我正试图将排序保存到数据库中。正如您在下面看到的,我为某些属性设置了隐藏元素,并且我的javascript正确地设置了HiddenFor(item.SortOrder)。然后它调用控制器。但我希望将整个行集合作为列表对象传回。有好的例子吗 @model System.Collections.Generic.IList<

对于我们的网站,我们有一个管理部分和一个用户部分。我们希望允许管理员指定在用户部分向用户列出哪些订单项目

我有一个MVC列表表,并且我已经启用了对行进行排序以实际更改排序值。但我正试图将排序保存到数据库中。正如您在下面看到的,我为某些属性设置了隐藏元素,并且我的javascript正确地设置了HiddenFor(item.SortOrder)。然后它调用控制器。但我希望将整个行集合作为列表对象传回。有好的例子吗

@model System.Collections.Generic.IList<PublicationSystem.Model.CustomField>
<table class="table sortable-table"
data-source-href='@Url.RouteUrl("Default",
    new { action = "_CustomFieldSort" },
    Request.Url.Scheme)'>
    <thead>
        <tr>
            <th>
                @Html.DisplayNameFor(model => model[0].ColumnName)
            </th>
            <th>
                @Html.DisplayNameFor(model => model[0].ColumnCaption)
            </th>
            <th></th>
        </tr>
    </thead>

    @for (var i=0; i < Model.Count; i++) //each (var item in Model)
    {
        <tr>
            <td>
                @Html.HiddenFor(modelItem => Model[i].CustomFieldId,new {name="fieldsToEdit["+i+"].CustomFieldId"})
                @Html.HiddenFor(modelItem => Model[i].CustomFormId, new { name = "fieldsToEdit[" + i + "].CustomFormId" })
                @Html.HiddenFor(modelItem => Model[i].SortOrder, new { name = "fieldsToEdit[" + i + "].SortOrder", @class = "SortOrder" })
                @Html.DisplayFor(modelItem => Model[i].ColumnName)
            </td>
            <td>
                @Html.DisplayFor(modelItem => Model[i].ColumnCaption)
            </td>
            <td>
                ... buttons
            </td>
        </tr>
    }
</table>
我的控制器方法:

public ActionResult _CustomFieldSort(List<CustomField> fieldsToEdit)
{
    if (fieldsToEdit != null) // fieldsToEdit is always null after the sort
    {
        var fieldCount = fieldsToEdit.Count();
    }

    return null;// PartialView();
}
public ActionResult\u CustomFieldSort(列表字段编辑)
{
if(fieldsToEdit!=null)//fieldsToEdit在排序后始终为null
{
var fieldCount=fieldsToEdit.Count();
}
返回null;//PartialView();
}

我的javascript正确地尝试了对控制器方法的ajax调用,但“fieldsToEdit”为空。我做错了什么?

批量更新排序?使用for循环将使您能够将整个列表映射回控制器上的post/get方法

@model System.Collections.Generic.IList<PublicationSystem.Model.CustomField>
<table class="table sortable-table">
<thead>
    <tr>
        <th>
            @Html.DisplayNameFor(model => model.ColumnName)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.ColumnCaption)
        </th>
        <th></th>
    </tr>
</thead>

@for (int i=0; i < Model.Length;i++)
{
    <tr>
        <td>
            @Html.HiddenFor(modelItem => Model[i].CustomFieldId,new {name="fieldsToEdit["+i+"].CustomFieldId")
            @Html.HiddenFor(modelItem =>Model[i].CustomFormId,new {name="fieldsToEdit["+i+"].CustomFormId")
            @Html.HiddenFor(modelItem => Model[i].SortOrder, new { @class = "SortOrder",name="fieldsToEdit["+i+"].SortOrder" })
            @Html.DisplayFor(modelItem => Model[i].ColumnName,new {name="fieldsToEdit["+i+"].ColumnName")
        </td>
        <td>
            @Html.DisplayFor(modelItem => Model[i].ColumnCaption,new {name="fieldsToEdit["+i+"].ColumnCaption")
        </td>
        <td>
            ... buttons
        </td>
    </tr>
}
@model System.Collections.Generic.IList
@DisplayNameFor(model=>model.ColumnName)
@DisplayNameFor(model=>model.ColumnCaption)
@对于(int i=0;iModel[i].CustomFieldId,新的{name=“fieldsToEdit[“+i+”].CustomFieldId”)
@Html.HiddenFor(modeleItem=>Model[i].CustomFormId,新的{name=“fieldsToEdit[“+i+”].CustomFormId”)
@Html.HiddenFor(modeleItem=>Model[i].SortOrder,新的{@class=“SortOrder”,name=“fieldsToEdit[“+i+”].SortOrder”})
@Html.DisplayFor(modelItem=>Model[i].ColumnName,新的{name=“fieldsToEdit[“+i+”].ColumnName”)
@DisplayFor(modelItem=>Model[i].ColumnCaption,新的{name=“fieldsToEdit[“+i+”].ColumnCaption”)
…按钮
}


然后点击“返回”按钮“发布”按钮将批量更新整个列表,但我不确定我是否正确回答了您的问题。

在客户端排序时,您的隐藏字段会发生变化?我现在不明白,您为什么要将其放在表中?为什么要将排序值保存在隐藏字段中?保存n的意义是什么数据库中的ew排序值?用户是否需要查看基于其旧排序的数据?通常我们将这些类型的数据绑定到网格并在列中启用排序,然后它将是simpleYeah,不,这不是我们想要的。管理员希望对这些字段进行排序,以便用户稍后在页面上查看这些字段时,它们显示在顺序。这些字段不会按照用户的选择进行排序,而是按照管理员的特定顺序进行排序。你说的“点击按钮发布按钮”是什么意思?控制器方法是什么样子的?假设你有一个包含类列表的模型;例如“model.ListOfClasses=new list();”那么countroller将是[httpPost]public ActionResult YourMethod(List ListofClass){//handle your,model here}注意,默认的ModelBinder希望视图具有@Html.TexboxFor/HiddenFor,ect(ListofClass[Index].yourProperty)发布数据时,类列表将被映射回好的,我想通过javascript ajax调用将其传递回。如果数据在表单中,可以使用$('#form_元素').submit();如果div不在表单中,则将ajax调用的数据设置为$('divWrapper').serialize();其中divWrapper是包含回发数据的编码div。谢谢。我已经更新了代码,但仍然不太正确。
@model System.Collections.Generic.IList<PublicationSystem.Model.CustomField>
<table class="table sortable-table">
<thead>
    <tr>
        <th>
            @Html.DisplayNameFor(model => model.ColumnName)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.ColumnCaption)
        </th>
        <th></th>
    </tr>
</thead>

@for (int i=0; i < Model.Length;i++)
{
    <tr>
        <td>
            @Html.HiddenFor(modelItem => Model[i].CustomFieldId,new {name="fieldsToEdit["+i+"].CustomFieldId")
            @Html.HiddenFor(modelItem =>Model[i].CustomFormId,new {name="fieldsToEdit["+i+"].CustomFormId")
            @Html.HiddenFor(modelItem => Model[i].SortOrder, new { @class = "SortOrder",name="fieldsToEdit["+i+"].SortOrder" })
            @Html.DisplayFor(modelItem => Model[i].ColumnName,new {name="fieldsToEdit["+i+"].ColumnName")
        </td>
        <td>
            @Html.DisplayFor(modelItem => Model[i].ColumnCaption,new {name="fieldsToEdit["+i+"].ColumnCaption")
        </td>
        <td>
            ... buttons
        </td>
    </tr>
}