Javascript 获取在控制器中动态添加的未排序列表项

Javascript 获取在控制器中动态添加的未排序列表项,javascript,arrays,asp.net-mvc,model-view-controller,Javascript,Arrays,Asp.net Mvc,Model View Controller,我正在开发一个带有Razor视图的项目MVC 我正在尝试用ul/li动态填充列表,但单击按钮也可以选择/选项。用户在填写字段时,单击添加按钮,将其添加到ul/li结构中 当我查看inspect元素时,我可以看到我的值被添加,我的问题是将它们存储到会话[…]中。。。或者在一个隐藏字段中,这样我就可以在控制器操作中对它们进行迭代 我从网上尝试了几个JS/Jquery答案,但在我的案例中似乎都不起作用 以下是我如何填充ul/li结构: function addPrice() { var pr

我正在开发一个带有Razor视图的项目MVC

我正在尝试用ul/li动态填充列表,但单击按钮也可以选择/选项。用户在填写字段时,单击添加按钮,将其添加到ul/li结构中

当我查看inspect元素时,我可以看到我的值被添加,我的问题是将它们存储到会话[…]中。。。或者在一个隐藏字段中,这样我就可以在控制器操作中对它们进行迭代

我从网上尝试了几个JS/Jquery答案,但在我的案例中似乎都不起作用

以下是我如何填充ul/li结构:

function addPrice() {

    var priceValue = $("#PriceValue").val() // this is the input that users fill in

    var ul = document.getElementById("priceListBox");
    var li = document.createElement("li");

    li.setAttribute('class', "list-group-item list-group-item-action"); // set the class for design
    li.setAttribute('id', priceValue); // set the id to be able to remove
    li.appendChild(document.createTextNode(priceValue));

    ul.appendChild(li);

}
上面用保存用户输入值的列表项正确填充ul

这是我的隐藏字段尝试:

<input type="hidden" name="PriceValues" value="" runat="server"/>
这是我的工作:

<ul class="list-group col-md-3" id="priceListBox" name="priceListBox" runat="server"> </ul>
这是我试图建立数组并在控制器操作中访问这些值的最新尝试:

function SetItemsToArray() {

    //const listItems = document.querySelectorAll('li');
    //for (let i = 0; i < listItems.length; i++) {
    //    alert(listItems[i].textContent);
    //}


    var listItems = document.getElementById('priceListBox').getElementsByTagName('li'), myArray = map(listItems, getText);           

    function map(arraylike, fn) {
        var ret = [], i = -1, len = arraylike.length;
        while (++i < len) ret[i] = fn(arraylike[i]);
        return ret;
    }

    function gettext(node) {
        if (node.nodetype === 3) return node.data;
        var txt = '';
        if (node = node.firstchild) do {
            txt += gettext(node);
        } while (node = node.nextsibling);

        $('#PriceValues').val(txt); // Jquery attempt
        document.getelementbyid("PriceValues").value = txt; // js attempt
    }
}
我想知道:

实现这一目标的最佳方式是什么? 实现这一目标的最快方法是什么? 为什么当前的尝试不起作用? 谢谢大家的回复,如果有任何问题,我会尽力正确回答


亲切问候。

也许我错了,但是,您的输入隐藏了一个name属性,而不是id?那么,您不应该指定一个id而不是一个名称吗?

因此,通过每个人的输入和多次尝试,我已经成功地在控制器中获取了值

@张若瑟,你完全正确,说得好!谢谢你指出这一点@安德烈亚斯,你也是对的,通过警报,我可以看到它在var listItems上停止运行。。。然后它就不会再跑了。我也不能让它工作,我也改变了getElementById语法,但我不能让函数正常工作,但我仍然想知道哪里出了问题,所以如果你想详细说明,我将不胜感激。 @Scott Rickman,我尝试了几种使用.textContent和其他方法的方法,但以下方法非常有效,也感谢您提供的拆分提示:

这通过将其放置在我动态添加列表项的位置来实现: document.getElementByIdPriceValues.value+=priceValue+

在我的控制器中: var a=请求.表单[价格值]

谢谢大家对我的帮助,我真的很感激!
祝你有一个愉快的一周,亲切的问候

JavaScript区分大小写,从控制台中的错误中可以明显看出这一点。您可以使用相同的事件将项目添加到ul中,以将新值附加到PriceValues值吗?您需要一个分隔符,以便服务器端可以将值拆分为字符串[]@Andreas,您能详细说明一下吗,因为我在控制台中没有任何错误,在线语法检查器enigma语法验证器中也没有错误。如果控制台中没有错误,则永远不会执行SetItemsToArray。