0

orderby および orderbydescending リスト関数を使用して並べ替えを行っていますが、読み取り専用のフィールドのみが正しく並べ替えられています。これを解決するのを手伝ってくれませんか。ありがとう。

コントローラーコード:

    public ActionResult ProductList()
            {
                var productList = new ProductListViewModel();
                productList.ProductItems = productRepository.GetProductsWithDeleteOption().ToList();
                productList.CategoryItems = categoryRepository.GetCategories().ToList();

                var sortList = GetSortList();

                productList.SortByList = sortList;
                productList.SelectedSortByValue = "ProductID";           

                return View(productList);
            }

            [HttpPost]
            public ActionResult ProductList(ProductListViewModel productViewModel, FormCollection formCollection, string submit)
            {            
                if (ModelState.IsValid)
                {
                    var sortList = GetSortList();
                    productViewModel.SortByList = sortList;

                    productViewModel.CategoryItems = categoryRepository.GetCategories().ToList();
                    productViewModel.SortByList = sortList;

                    // Check for submit action
                    if (submit == "Change Sort")
                    {
                        if (formCollection["SortDirection"] == "Desc")
                        {
                            switch (productViewModel.SelectedSortByValue)
                            {
                                case "ProductID": productViewModel.ProductItems = productViewModel.ProductItems.OrderByDescending(m => m.ProductID).ToList(); break;
                                case "Code": productViewModel.ProductItems = productViewModel.ProductItems.OrderByDescending(m => m.Code).ToList(); break;
                                case "Name": productViewModel.ProductItems = productViewModel.ProductItems.OrderByDescending(m => m.Name).ToList(); break;
                                case "Price": productViewModel.ProductItems = productViewModel.ProductItems.OrderByDescending(m => m.Price).ToList(); break;
                                default: productViewModel.ProductItems = productViewModel.ProductItems.OrderByDescending(m => m.ProductID).ToList(); break;
                            }

                        }
                        else
                        {
                            switch (productViewModel.SelectedSortByValue)
                            {
                                case "ProductID": productViewModel.ProductItems = productViewModel.ProductItems.OrderBy(m => m.ProductID).ToList(); break;
                                case "Code": productViewModel.ProductItems = productViewModel.ProductItems.OrderBy(m => m.Code).ToList(); break;
                                case "Name": productViewModel.ProductItems = productViewModel.ProductItems.OrderBy(m => m.Name).ToList(); break;
                                case "Price": productViewModel.ProductItems = productViewModel.ProductItems.OrderBy(m => m.Price).ToList(); break;
                                default: productViewModel.ProductItems = productViewModel.ProductItems.OrderBy(m => m.ProductID).ToList(); break;
                            }
                        }
                    }
                    else if (submit == "Delete all selected")
                    {

                    }
                    else if (submit == "Update All")
                    {

                    }
                    else if (submit == "Restrict Display")
                    {

                    }
                }
                return View(productViewModel);
            }

意見:

@for (var i = 0; i < Model.ProductItems.Count; i++)
{
    <tr>
        <td>
            @Html.HiddenFor(m => m.ProductItems[i].ProductID)                        
            @Html.ActionLink(Model.ProductItems[i].ProductID.ToString(), "ProductEdit", new { id = Model.ProductItems[i].ProductID })
        </td>
        <td>
            @Html.HiddenFor(m => m.ProductItems[i].Code)
            @Html.DisplayFor(m => m.ProductItems[i].Code)
        </td>
        <td>
            @Html.HiddenFor(m => m.ProductItems[i].Name)
            @Html.DisplayFor(m => m.ProductItems[i].Name)
        </td>
        <td>
            @Html.EditorFor(m => m.ProductItems[i].Price)
        </td>
        <td>
            @Html.CheckBoxFor(m => m.ProductItems[i].On_Sale, new { id = "On_Sale_" + Model.ProductItems[i].ProductID })
        </td>
        <td>
            @Html.EditorFor(m => m.ProductItems[i].DiscountedPrice)
        </td>
        <td>
            @Html.EditorFor(m => m.ProductItems[i].Weight)
        </td>
        <td>
            @Html.CheckBoxFor(m => m.ProductItems[i].IsForDelete, new { id = Model.ProductItems[i].ProductID }) 
        </td>
        <td>
            @Html.ActionLink("Edit", "ProductEdit", new { id = Model.ProductItems[i].ProductID }) |
            @Html.ActionLink("Details", "Details", new { id = Model.ProductItems[i].ProductID }) |
            @Html.ActionLink("Delete", "Delete", new { id = Model.ProductItems[i].ProductID })
        </td>
    </tr>
}
4

2 に答える 2

1

これは、信頼できないインスタンスである可能性がありますがHtml.CheckBoxFor<T>()、代わりに、探している と の値Html.CheckBox()を手動でバインドするために使用する必要があります。Ids

それは最高ではありませんが、以前はうまくいったようです。View頭の中で考えている疑似コードの例を次に示します。

@for (var i = 0; i < Model.ProductItems.Count; i++)
{
    <tr>
        <td>
            @Html.HiddenFor(m => m.ProductItems[i].ProductID)                        
            @Html.ActionLink(Model.ProductItems[i].ProductID.ToString(), "ProductEdit", new { id = Model.ProductItems[i].ProductID })
        </td>
        <td>
            @Html.HiddenFor(m => m.ProductItems[i].Code)
            @Html.DisplayFor(m => m.ProductItems[i].Code)
        </td>
        <td>
            @Html.HiddenFor(m => m.ProductItems[i].Name)
            @Html.DisplayFor(m => m.ProductItems[i].Name)
        </td>
        <td>
            @Html.EditorFor(m => m.ProductItems[i].Price)
        </td>
        <td>  **CHANGE HERE**
            @Html.CheckBox(string.format("On_Sale_{0}", Model.ProductItems[i].ProductID), Model.ProductItems[i].IsOnSale)
            @Html.CheckBoxFor(m => m.ProductItems[i].On_Sale, new { id = "On_Sale_" + Model.ProductItems[i].ProductID })
        </td>
        <td>
            @Html.EditorFor(m => m.ProductItems[i].DiscountedPrice)
        </td>
        <td>
            @Html.EditorFor(m => m.ProductItems[i].Weight)
        </td>
        <td>
            @Html.CheckBoxFor(m => m.ProductItems[i].IsForDelete, new { id = Model.ProductItems[i].ProductID }) 
        </td>
        <td>
            @Html.ActionLink("Edit", "ProductEdit", new { id = Model.ProductItems[i].ProductID }) |
            @Html.ActionLink("Details", "Details", new { id = Model.ProductItems[i].ProductID }) |
            @Html.ActionLink("Delete", "Delete", new { id = Model.ProductItems[i].ProductID })
        </td>
    </tr>
}
于 2013-07-16T05:11:27.493 に答える
0

私は同様の問題に遭遇し、チェックボックス、hiddenfor、および小さな JQuery を次のように使用して、チェックボックスの値を取り戻すことができました。

@Html.CheckBox("isPreferred", Model.IsPreferred)
@Html.HiddenFor(m => m.IsPreferred)

<script>

    $("#isPreferred").change(function () {

        $("#IsPreferred").val($("#isPreferred").val());

    })

</script>
于 2014-12-01T21:39:01.490 に答える