Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NET MVC多个DropDownListFor,页面太慢。如何进行后期绑定或分组?_C#_Jquery_Asp.net Mvc_Performance_Drop Down Menu - Fatal编程技术网

C# ASP.NET MVC多个DropDownListFor,页面太慢。如何进行后期绑定或分组?

C# ASP.NET MVC多个DropDownListFor,页面太慢。如何进行后期绑定或分组?,c#,jquery,asp.net-mvc,performance,drop-down-menu,C#,Jquery,Asp.net Mvc,Performance,Drop Down Menu,(对我来说)我面临着一个非常棘手的问题 我在ASP.NET MVC中有一个页面,其中有一个合同列表 对于每个合同,我有3个下拉列表(合同、收款人、货币) 这些下拉列表用于更改合同的详细信息 下拉列表中充满了选项,但每行的选项始终相同 我得到的是一个很难加载的页面,它会在加载所有下拉列表时冻结浏览器 您知道如何将所有下拉列表绑定到同一个选项列表吗 这是代码的一部分: @foreach (Models.ContractsModel CM in Model) { ... <

(对我来说)我面临着一个非常棘手的问题

我在ASP.NET MVC中有一个页面,其中有一个合同列表

对于每个合同,我有3个下拉列表(合同、收款人、货币)

这些下拉列表用于更改合同的详细信息

下拉列表中充满了选项,但每行的选项始终相同

我得到的是一个很难加载的页面,它会在加载所有下拉列表时冻结浏览器

您知道如何将所有下拉列表绑定到同一个选项列表吗

这是代码的一部分:

 @foreach (Models.ContractsModel CM in Model)
          { ...
<div class="form-group">
<label class="hidden-lg">Site</label>
@Html.DropDownListFor(model => CM.Site, StudyGlobalProperties.FillDropDownList(...), "", new { @class = "form-control" })
@foreach(Models.contracts模型中的模型CM)
{ ...
场地
@Html.DropDownListFor(model=>CM.Site,StudyGlobalProperties.FillDropDownList(…),“”,new{@class=“form control”})
非常感谢你的帮助。
KR

您可以让客户端使用JavaScript完成大部分工作。您在隐藏元素中提供一次列表,然后使用JavaScript提取此数据并填写下拉列表

例如:

@{
    //Assigning example values
    IEnumerable<string> contracts = new[] { "contract a", "contract b", "etc." };
    IEnumerable<string> payees = new[] { "person a", "person b", "etc." };
    IEnumerable<string> currencies = new[] { "Euro", "Dollar", "etc." };
}
@{/* Example on how you could store the values in hidden input elements */}
@Html.Hidden("hiddenContracts", contracts.Aggregate((left, right) => left + "," + right))
@Html.Hidden("hiddenPayees", payees.Aggregate((left, right) => left + "," + right))
@Html.Hidden("hiddenCurrencies", currencies.Aggregate((left, right) => left + "," + right))

@{/* some sets of dropdowns for demonstration */}
<select class="contractDropdown" id="conList1"></select>
<select class="contractDropdown" id="conList2"></select>
<select class="contractDropdown" id="conList3"></select>
<select class="contractDropdown" id="conList4"></select>
<select class="contractDropdown" id="conList5"></select>

<select class="payeeDropdown" id="payList1"></select>
<select class="payeeDropdown" id="payList2"></select>
<select class="payeeDropdown" id="payList3"></select>
<select class="payeeDropdown" id="payList4"></select>
<select class="payeeDropdown" id="payList5"></select>

<select class="currencyDropdown" id="curList1"></select>
<select class="currencyDropdown" id="curList2"></select>
<select class="currencyDropdown" id="curList3"></select>
<select class="currencyDropdown" id="curList4"></select>
<select class="currencyDropdown" id="curList5"></select>

@{/* i include javascript here for this demonstration, you should propably do that in the header */}
<script src="https://code.jquery.com/jquery-1.10.2.js"></script>
<script type="text/javascript">
    /**
     * Fills the target node with the comma seperated list of options in the list node
     * @@param target The target node, preferably a select element
     * @@param list The list node, containing the possible options seperated by commas
     */
    function fill(target, list) {
        $.each(list.val().split(","), function (i, value) {
            target.append("<option value='" + value + "'>" + value + "</option>");
        });
    }
    //fills the contract-, payee- and currency dropdowns with their respective data
    fill($("select.contractDropdown"), $("input#hiddenContracts"));
    fill($("select.payeeDropdown"), $("input#hiddenPayees"));
    fill($("select.currencyDropdown"), $("input#hiddenCurrencies"));
</script>
@{
//指定示例值
IEnumerable contracts=新[]{“合同a”、“合同b”、“等”};
IEnumerable受款人=新[]{“人a”、“人b”、“等”};
IEnumerable currences=新[]{“欧元”、“美元”、“等”};
}
@{/*关于如何在隐藏输入元素中存储值的示例*/}
@Hidden(“hiddenContracts”,contracts.Aggregate((左,右)=>left+,“+right))
@Html.Hidden(“hiddenPayees”,payees.Aggregate((左,右)=>left+”,“+right))
@Html.Hidden(“hiddenCurrencies”,currencies.Aggregate((左、右)=>left+,“+right))
@{/*用于演示的一些下拉列表集*/}
@{/*我在这里为这个演示包含javascript,您应该在头文件中这样做*/}
/**
*使用列表节点中以逗号分隔的选项列表填充目标节点
*@@param目标是目标节点,最好是选择元素
*@@param列出列表节点,其中包含以逗号分隔的可能选项
*/
功能填充(目标、列表){
$.each(list.val().split(“,”),函数(i,值){
target.append(“+value+”);
});
}
//用各自的数据填写合同、收款人和货币下拉列表
填充($(“select.contractDropdown”)、$(“input#hiddenContracts”);
填写($(“select.payedropdown”)、$(“input#hiddenPayees”);
填充($(“select.currencyDropdown”),$(“input#HiddenCurrences”);

请注意,您可能需要采用稍微复杂一点的方法,因为您可能需要在下拉列表中指定值的ID。但是通过这种方法,您应该了解如何做到这一点。

与您的性能问题无关,但我建议您的阅读和-您的代码永远不会绑定到您的模型,因为它非常感谢您我们的帮助。我必须使用“标准”下拉列表,但没关系。再次感谢。