Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/88.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
Javascript 如何在单击按钮时附加多个下拉列表,每个下拉列表在名称属性中具有不同的索引?_Javascript_Jquery_Asp.net Mvc_Razor - Fatal编程技术网

Javascript 如何在单击按钮时附加多个下拉列表,每个下拉列表在名称属性中具有不同的索引?

Javascript 如何在单击按钮时附加多个下拉列表,每个下拉列表在名称属性中具有不同的索引?,javascript,jquery,asp.net-mvc,razor,Javascript,Jquery,Asp.net Mvc,Razor,我试图在点击按钮时添加一些下拉列表。这些下拉列表的“名称”属性中应该有适当的索引 这是下拉列表:- <div id="dropdownDiv" style="display:none"> <div class="form-group"> @Html.LabelFor(model => model.PropertyInvestors, htmlAttributes: new { @class = "control-label col-md-2"

我试图在点击按钮时添加一些下拉列表。这些下拉列表的“名称”属性中应该有适当的索引

这是下拉列表:-

<div id="dropdownDiv" style="display:none">
    <div class="form-group">
        @Html.LabelFor(model => model.PropertyInvestors, htmlAttributes: new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.DropDownListFor(model => model.PropertyInvestors, (IEnumerable<SelectListItem>)@ViewBag.Investors, "Select Investor", htmlAttributes: new { @id = "dropdown",@name= "[#].PropertyInvestors", @class = "form-control",@onChange="dropdownChange()" })
            @Html.ValidationMessageFor(model => model.PropertyInvestors, "", new { @class = "text-danger" })
        </div>
    </div>
</div> 

问题:-下拉列表在单击时被追加,但它们的名称属性对于生成的所有下拉列表都相同,因此我无法将数据回发到控制器。

您可以按如下方式替换ID和名称:

$('#addDropdown').click(function () {
    var index = (new Date()).getTime();
    var clone1 = $('#dropdownDiv').clone();        
    $(clone1).find('select').attr("id", index);      
    $(clone1).find('select').attr("name", "PropertyInvestor[" + index +"]");  
    $('#field1').append(clone1.html());
});

JSFiddler:

虽然这个问题可以通过使用伪代码和使用JS操作索引号来解决,但一个好方法是使用Html.BeginCollectionItem,为下拉菜单创建一个部分视图,然后调用ajax将部分视图附加到主视图。参考答案

查看生成的html。您的新{@name=[].PropertyInvestors}没有任何功能幸运的是-您生成的name=PropertyInvestors因此.replace函数没有任何可替换的内容。@StephenMuecke我正考虑像您昨天所说的那样,用简单的html为下拉列表编写一个伪代码。但我不知道如何处理部分下拉列表,所以我尝试了这个方法:/i我给您的建议是使用BeginCollectionItem帮助器方法,并对一个方法进行ajax调用,该方法返回您根据添加到DOM中的部分视图。虽然做你想做的事情是可能的,但这将成为你的噩梦maintain@StephenMuecke好的,一个简单的问题。在我的例子中,我有一个包含FounderInvestmentViewModel的PropertyViewModel。下拉项是从PropertyViewModel中提取的。正如您昨天看到的,在我选择了一个dropndown项之后,文本框被追加,其值必须转到FounderInvestmentViewModel。对于我的案例,答案还是一样的吗?对不起,我不确定你的意思,我还没有机会为这个问题添加答案@Sudeep Shrestha,我已经更新了代码并创建了示例JSFiddler。它添加ID和name作为时间戳,以便将下拉值发布回控制器,name属性不应该是这样的:name=PropertyInvestor[]。@Sudeep Shrestha,我已经更新了代码并更新了JSFiddler链接。这对你有用吗?
$('#addDropdown').click(function () {
    var index = (new Date()).getTime();
    var clone1 = $('#dropdownDiv').clone();        
    $(clone1).find('select').attr("id", index);      
    $(clone1).find('select').attr("name", "PropertyInvestor[" + index +"]");  
    $('#field1').append(clone1.html());
});