新足迹

 找回密码
 注册

精华好帖回顾

· 待他自熟莫催他,火候足时他自美 (2021-8-15) 明河素月 · 【冬日里的暖食暖文】清炖狮子头:爱是回忆是传承 (2015-7-22) 明河素月
· 转帖:澳洲买房步骤ZT (2005-2-20) allen007 · 北昆世兰度假游玩经验和花费总结(附图66张)最近更新在3楼,全部完毕! (2006-1-5) 没有残缺
Advertisement
Advertisement
查看: 1838|回复: 29

小白的C#问题 (之二) [复制链接]

发表于 2011-6-16 14:35 |显示全部楼层
此文章由 porcorosso 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 porcorosso 所有!转贴必须注明作者、出处和本声明,并保持内容完整
一个简单html form:
  1. <form name="myform">
  2.         <table>
  3.                 <tr>
  4.                         <td><input name="product[]" value="11"></td>
  5.                         <td><input name="price[]" value="22"></td>
  6.                 </tr>
  7.                 <tr>
  8.                         <td><input name="product[]" value="33"></td>
  9.                         <td><input name="price[]" value="44"></td>
  10.                 </tr>
  11.                 <tr>
  12.                         <td><input name="product[]" value="55"></td>
  13.                         <td><input name="price[]" value="66"></td>
  14.                 </tr>
  15.         </table>
  16.         <input type="submit">
  17. </form>       
复制代码
在PHP, 我们可以直接retrieve product and price as array。也就是说formdata processing时我们可以这样:
  1. <?php
  2.         for($i = 0; $i < count($_REQUEST['product']); $i++)
  3.         {
  4.                 echo "The price of product " . $_REQUEST['product'][$i] . " is " . $_REQUEST['price'][$i] . PHP_EOL;
  5.         }
  6. ?>
复制代码
Output:
  1. The price of product 11 is 22
  2. The price of product 33 is 44
  3. The price of product 55 is 66
复制代码
请问asp.net c# 应该怎么做? 看了一下<asp:textbox> 好像行不通。。。

Advertisement
Advertisement

发表于 2011-6-16 14:43 |显示全部楼层
此文章由 flyspirit 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 flyspirit 所有!转贴必须注明作者、出处和本声明,并保持内容完整
数据是从DATABASE中获得吗?如果是的话用 ListView或者GridView

评分

参与人数 1积分 +2 收起 理由
porcorosso + 2 猜错了,安慰一下

查看全部评分

发表于 2011-6-16 14:47 |显示全部楼层
此文章由 porcorosso 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 porcorosso 所有!转贴必须注明作者、出处和本声明,并保持内容完整
不一定是,更多是需要前台动态增加table rows with input fields...

2010年度奖章获得者

发表于 2011-6-16 14:48 |显示全部楼层
此文章由 dalaohu 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 dalaohu 所有!转贴必须注明作者、出处和本声明,并保持内容完整
mvc, mvvm, mvp 都有很好的办法处理这个情况,尤其是mvvm,mvc比你的这个php跟有效率很多的处理。

你问的是classic webform里怎么做的话。 大致是。 吧textbox放在 asp:repeater  itemtemplate里。postback后再loop thru each row to retrieve the values form textboxes。 跟你的php logic比较类似

评分

参与人数 1积分 +2 收起 理由
porcorosso + 2 呵呵.net2

查看全部评分

足迹 Reader is phenomenal. If you never used, you never lived 火速下载

发表于 2011-6-16 14:50 |显示全部楼层
此文章由 flyspirit 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 flyspirit 所有!转贴必须注明作者、出处和本声明,并保持内容完整
整个过程中有没有和数据库交互的部分? 如果有,优先考虑databinding空间, 比如前面讲的。

如果完全没有, 那时个啥情况?

发表于 2011-6-16 14:51 |显示全部楼层
此文章由 典 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 典 所有!转贴必须注明作者、出处和本声明,并保持内容完整
如果只是读用户输入,用jquery很容易,能不能要jquery拿到后,用AJAX传给后台?

评分

参与人数 1积分 +2 收起 理由
porcorosso + 2 今天最后两分

查看全部评分

Advertisement
Advertisement

2010年度奖章获得者

发表于 2011-6-16 14:56 |显示全部楼层

回复 flyspirit 5# 帖子

此文章由 dalaohu 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 dalaohu 所有!转贴必须注明作者、出处和本声明,并保持内容完整
全部前台动态加textbox的话,那就用javascript呗。

client submit后也用js采集所有数值后 用ajax post 到 service。

2010年度奖章获得者

发表于 2011-6-16 14:58 |显示全部楼层

回复 dalaohu 7# 帖子

此文章由 dalaohu 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 dalaohu 所有!转贴必须注明作者、出处和本声明,并保持内容完整
另外前台加的 html input box 一样可以post 到code behind, 都在form collection 里

发表于 2011-6-16 15:02 |显示全部楼层

回复 dalaohu 7# 帖子

此文章由 flyspirit 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 flyspirit 所有!转贴必须注明作者、出处和本声明,并保持内容完整
现在做个事情, 流派风格很多啊, 跟不上了。

发表于 2011-6-16 15:07 |显示全部楼层
此文章由 porcorosso 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 porcorosso 所有!转贴必须注明作者、出处和本声明,并保持内容完整
想过jquery,以前也是这样的;但是不知道jqeury生成后C#后台怎么做。。。

发表于 2011-6-16 15:08 |显示全部楼层
此文章由 porcorosso 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 porcorosso 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 dalaohu 于 2011-6-16 14:56 发表
全部前台动态加textbox的话,那就用javascript呗。

client submit后也用js采集所有数值后 用ajax post 到 service。


避免用AJAX,费事到时小小白们不会maintain...
Advertisement
Advertisement

发表于 2011-6-16 15:10 |显示全部楼层
此文章由 porcorosso 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 porcorosso 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 dalaohu 于 2011-6-16 14:58 发表
另外前台加的 html input box 一样可以post 到code behind, 都在form collection 里


formcollection 是.net3.5++的?

我只是.net2.0(server极限)

2010年度奖章获得者

发表于 2011-6-16 15:15 |显示全部楼层

回复 flyspirit 9# 帖子

此文章由 dalaohu 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 dalaohu 所有!转贴必须注明作者、出处和本声明,并保持内容完整
流派真的很多,以前做webform的时候,我的原则是UI越简单越好。

后来做winform,mvvm,mvc那这个有很酷的方法解决了。 靠inotifypropertychanged

2010年度奖章获得者

发表于 2011-6-16 15:16 |显示全部楼层
此文章由 dalaohu 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 dalaohu 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 porcorosso 于 2011-6-16 15:10 发表


formcollection 是.net3.5++的?

我只是.net2.0(server极限)

应该一样的, 你也可以用 Request["fieldname"]之类的。
足迹 Reader is phenomenal. If you never used, you never lived 火速下载

2010年度奖章获得者

发表于 2011-6-16 15:34 |显示全部楼层
此文章由 dalaohu 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 dalaohu 所有!转贴必须注明作者、出处和本声明,并保持内容完整
http://www.4guysfromrolla.com/articles/082102-1.aspx

看看这个,应该是你要的, 2.0 里,你就老老实实的postback吧。

发表于 2011-6-16 16:05 |显示全部楼层
此文章由 bullying520 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 bullying520 所有!转贴必须注明作者、出处和本声明,并保持内容完整
每次技术贴就要拜见各位大牛 同样是学IT的 差距咋就那么大捏
Advertisement
Advertisement

发表于 2011-6-16 16:16 |显示全部楼层
此文章由 porcorosso 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 porcorosso 所有!转贴必须注明作者、出处和本声明,并保持内容完整
感谢,明天加分,没分了。。。

发表于 2011-6-16 16:23 |显示全部楼层
此文章由 乱码 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 乱码 所有!转贴必须注明作者、出处和本声明,并保持内容完整
下面这种solution working,但基本上就是失去webform的优势了.

把这个copy/paste到page_load里面就好。前面的html我没变。

      protected void Page_Load(object sender, EventArgs e)
        {
            if (IsPostBack)
            {
                string[] lsProduct = Request.Form["product[]"].Split(',');

                string[] lsPrice = Request.Form["price[]"].Split(',');

                for (int i = 0; i < lsProduct.Length; i++)
                {
                    Response.Write(string.Format("The price of product {0} is {1} </br>",lsProduct,lsPrice));
                    
                }

                Response.End();

            }
        }

这个论坛不喜欢i,

replace 高亮的lsProduct with "lsProduct left square bracket then i then right square bracket"

replace 高亮的lsPrice with "lsPrice left square bracket then i then right square bracket"

[ 本帖最后由 乱码 于 2011-6-16 16:32 编辑 ]

评分

参与人数 1积分 +2 收起 理由
porcorosso + 2 就只有两分了。。。

查看全部评分

发表于 2011-6-16 16:34 |显示全部楼层
此文章由 porcorosso 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 porcorosso 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 乱码 于 2011-6-16 16:23 发表
Request.Form["product[]"].Split(',')


刚开始我就是想这样的,但如果user input有小豆号那怎么办?

发表于 2011-6-16 16:42 |显示全部楼层
此文章由 乱码 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 乱码 所有!转贴必须注明作者、出处和本声明,并保持内容完整
这个逗号是webform自动加上去的,因为所有product都是用同一个名字,webform就用逗号隔开.我觉得这个不能避免。

解决途径:

1.html tag product用不同的名字,但需要用_N结尾,但跟它配对的price也要用同样的N, 比如 product_1,他配对的price就要用price_1.

2.在client那边作validation,不允许用户输入逗号。

2010年度奖章获得者

发表于 2011-6-16 16:48 |显示全部楼层
此文章由 dalaohu 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 dalaohu 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 乱码 于 2011-6-16 16:42 发表

2.在client那边作validation,不允许用户输入逗号。


这个太勉强了吧。。。

如果必须允许都好的话,不如用js 先replace 个特殊符号再post
足迹 Reader is phenomenal. If you never used, you never lived 火速下载
Advertisement
Advertisement

发表于 2011-6-16 16:58 |显示全部楼层
此文章由 乱码 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 乱码 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 dalaohu 于 2011-6-16 16:48 发表


这个太勉强了吧。。。

如果必须允许都好的话,不如用js 先replace 个特殊符号再post


这还要heck javascript postback,还不如把textbox input的keystroke跟jQuery的eventhandler挂钩,禁止输入逗号。

我比较倾向于把product/price用同一个naming convention,让server那边去handle,很容易的。

发表于 2011-6-16 18:10 |显示全部楼层
此文章由 porcorosso 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 porcorosso 所有!转贴必须注明作者、出处和本声明,并保持内容完整
我现在的思路就是用jquery加tablerow, 所有input都不用ID,然后postback时就用 regex 来detect fieldname。。毕竟用jquery我可以随意改fieldname成我想要的product_n 跟price_n

应该可以。。。

发表于 2011-6-16 18:46 |显示全部楼层
此文章由 乱码 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 乱码 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 porcorosso 于 2011-6-16 18:10 发表
我现在的思路就是用jquery加tablerow, 所有input都不用ID,然后postback时就用 regex 来detect fieldname。。毕竟用jquery我可以随意改fieldname成我想要的product_n 跟price_n

应该可以。。。


只要你不是用server control(runat="server"),怎么写id/name都没所谓,就是html markup,一旦用了server control,id基本上就不能动了。

webform postback是根据id来做validation/control tree restore的,id改了之后postback回来会有很大的问题。

我觉得这个case根webform到没什么关系,可能会用点server这边c#的regex.

发表于 2011-6-16 22:19 |显示全部楼层
此文章由 jerryinau 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 jerryinau 所有!转贴必须注明作者、出处和本声明,并保持内容完整
加一个hidden input 在form 里面,用jquery data 得到 json string 然后base64 encode到hidden field,然后再server side 取得hidden field value, decode 成json string,接下来你想怎么处理都可以。
在thick 客户端用 hidden field 加 json 你可以maintain 复杂的objects,这个和asp.net webform hidden field maintain veiwstate是一样的道理

评分

参与人数 1积分 +2 收起 理由
porcorosso + 2 补分

查看全部评分

发表于 2011-6-17 17:16 |显示全部楼层
此文章由 matrixkong 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 matrixkong 所有!转贴必须注明作者、出处和本声明,并保持内容完整
search codeproject tons of solutions
Advertisement
Advertisement

发表于 2011-6-17 18:29 |显示全部楼层
此文章由 porcorosso 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 porcorosso 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 matrixkong 于 2011-6-17 17:16 发表
search codeproject tons of solutions


maybe you can help provide a few samples?

发表于 2011-6-18 10:19 |显示全部楼层
此文章由 flyspirit 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 flyspirit 所有!转贴必须注明作者、出处和本声明,并保持内容完整
LZ好人,回答错了都有分加

发表于 2011-6-18 13:02 |显示全部楼层
此文章由 huzhenxin 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 huzhenxin 所有!转贴必须注明作者、出处和本声明,并保持内容完整
用html form本身post上来的数据,可以在Request的属性中找到。
Asp.Net一般喜欢用服务器控件在客户端和服务器之间传送数据。php转过来的会很不习惯。php一般也是吧form的数据保存在request的全局变量中的。

两者风格完全不一样。建议先看aps.net的数,好多概念和开发方式在php中是没有的。微软自己搞了一套很尴尬的服务器端控件。

评分

参与人数 1积分 +2 收起 理由
porcorosso + 2 有共鸣

查看全部评分

发表于 2011-6-18 14:47 |显示全部楼层
此文章由 porcorosso 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 porcorosso 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 huzhenxin 于 2011-6-18 13:02 发表
用html form本身post上来的数据,可以在Request的属性中找到。
Asp.Net一般喜欢用服务器控件在客户端和服务器之间传送数据。php转过来的会很不习惯。php一般也是吧form的数据保存在request的全局变量中的。

两者风格完全不一样。建议先看aps.net的数,好多概念和开发方式在php中是没有的。微软自己搞了一套很尴尬的服务器端控件。


习惯是肯定不习惯的了,但以前做过winform,所以都还好。

我最后用了Request.Params,搞定了

发表回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Advertisement
Advertisement
返回顶部