【问题标题】:Grabbing values of jquery generated html with c#用c#抓取jquery生成的html的值
【发布时间】:2013-05-08 22:55:53
【问题描述】:

我正在尝试获取使用 JQuery 生成的 TextBox 的值。文本框一次添加到第 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% 错误的。我在网上阅读了一些信息,可能无法正确理解。

【问题讨论】:

  • Request.Form 按名称查找表单元素是否有帮助?

标签: c# jquery html asp.net forms


【解决方案1】:

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

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

然后您可以使用 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");
        }
    }

或者你可以直接将这些数组一起压缩成一个“items”数组

            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 });

其中每件商品将具有大小、颜色和价格属性。

【讨论】:

  • 我计划将这些项目作为批量产品添加到产品数据库中。将它们分组,使 1 种尺寸的颜色和价格构成 1 件商品。那么压缩它们是最好的选择吗?
  • @jackncoke 这完全是可选的;如果您需要在代码中进一步处理数据,如果您想要更好的可读性,它会有所帮助。
  • @sircapsalot 需要详细说明吗?您指的是哪些约定?
  • w3.org/TR/xhtml1/#h-4.4 '&lt;div id=item' + counter + '&gt; 应该是 '&lt;div id="item' + counter + '"&gt;' 我知道我很迂腐,但你应该纠正 OP 偏离约定:)
  • @sircapsalot 你是对的,我什至没有注意到当我复制 OP 的字符串时.. 我会编辑!
【解决方案2】:

你想要的

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

所有 3 个文本框都命名为“item”。

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

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"];

有关Request.Form的更多信息,请参阅MSDN

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-10
    • 2014-08-08
    • 2020-08-22
    • 1970-01-01
    • 1970-01-01
    • 2015-01-28
    • 2014-07-30
    相关资源
    最近更新 更多