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