0

我正在尝试获取使用 JQuery 生成的文本框的值。文本框一次添加到第 3 页。每 3 个方框代表一个项目。

在此处输入图像描述

添加创建另外 3 个用于大小、价格和颜色的框。似乎您可以以我被告知的形式获取所有内容,Request.Form这给了您NameValueCollection某种方式,如果我错了,请纠正我,这些值应该存储在该集合中。那是我似乎无法理解的。基于该集合,您如何找到文本框的名称和值?

创建框的 JQuery:

 <script type="text/javascript">
         counter = 1;

         function foo() {
             $(".form").append('<div id=item' + counter + '><hr/><div class="innerItem"><p>size</p><input type="text" name="item" /><p>color</p><input type="text" name="item" /><p>price</p><input type="text" name="item" /></div>');
             del = $("#item" + counter);
             del.append('<input type="button" class="remove" value="remove" id="' + counter + '"/>');
             counter++;
         }

         $("body").on('click', '.remove', function () {
             var id = $(this).attr("id");
             $("#item" + id).remove();
         });
</script>

这就是我在代码隐藏中的内容。主要是使用这段代码来弄清楚它是如何工作的。

  protected void Page_Load(object sender, EventArgs e)
        {
            if(IsPostBack)
            {
            NameValueCollection data;

            //Load Form variables into NameValueCollection variable.
            data = Request.Form;
            // Get names of all forms into a string array.
            String[] arr1 = data.AllKeys;



            for (int loop1 = 0; loop1 < arr1.Length; loop1++)
            {
                Response.Write("Form: " + arr1[loop1] + "<br>");
            }

            }
        }

这是代码隐藏生成的:

表格:__EVENTTARGET

形式:__EVENTARGUMENT

表格:__VIEWSTATE

形式:项目

我在想我想要的数据在item. 我只是不明白这是否正确或如何访问其中的内容item

这也可能是 100% 错误的。我在网上阅读了一些信息,可能无法正确理解。

4

2 回答 2

1

你要

var postedValue = Request.Form["item"];

您的所有 3 个文本框都被命名为“项目”。

您想将文本框的名称更改为类似

function foo() {
     $(".form").append('<div id=item' + counter + '><hr/><div class="innerItem"><p>size</p><input type="text" name="item-size" /><p>color</p><input type="text" name="item-color" /><p>price</p><input type="text" name="item-price" /></div>');
     del = $("#item" + counter);
     del.append('<input type="button" class="remove" value="remove" id="' + counter + '"/>');
     counter++;
 }

然后使用

var size = Request.Form["item-size"];
var color = Request.Form["item-color"];
var price = Request.Form["item-price"];

有关更多信息,请参阅MSDNRequest.Form

于 2013-05-08T14:32:31.140 回答
1

首先,您应该为每个文本框指定一个唯一的名称,以便在发布时将它们区分开来。

$(".form").append('<div id="item' + counter + '"><hr/><div class="innerItem"><p>size</p><input type="text" name="item-size" /><p>color</p><input type="text" name="item-color" /><p>price</p><input type="text" name="item-price" /></div>');

然后,您可以使用 GetValues 方法在代码隐藏中获取这些数组

    protected void Page_Load(object sender, EventArgs e)
    {
        if (IsPostBack)
        {
            string[] Sizes = Request.Form.GetValues("item-size");
            string[] Colors = Request.Form.GetValues("item-color");
            string[] Prices = Request.Form.GetValues("item-price");
        }
    }

或者您可以直接将这些数组一起压缩成一个“项目”数组

            var items = Request.Form.GetValues("item-size")
                .Zip(Request.Form.GetValues("item-color"), (s, c) => new { s, c })
                .Zip(Request.Form.GetValues("item-price"), (a, p) => new { Size = a.s, Color = a.c, Price = p });

其中每个项目将具有大小、颜色和价格属性。

于 2013-05-08T14:34:55.337 回答