我正在开发一个asp.net webforms应用程序,我必须创建'动态订单行' 那是: 您选择产品和数量,并计算金额。 要想象:这是一个'线',所以最好的产品下拉列表,旁边是数量文本框,旁边是金额标签。
然后点击“添加其他产品”,添加另一个“行”,其中包含产品下拉列表,数量文本框和数量标签。
所以你可以点击添加并添加和添加....
现在我正在考虑如何实现这一点,我提出了两个选择:
'添加html客户端'和'添加用户控制服务器端'
第一个当然看起来更花哨,但我还必须创建一些服务器端代码再次生成行,当用户说'去'但是在验证后我必须警告用户例如金额超过信用额或者数量很高。然后我得到'客户端'添加html,我必须在我的代码后面重现,我是对的吗?
另一方面(添加用户控制服务器端),我必须在'和另一个产品'回发上创建一个新的用户控件,这可能在开始时看起来更容易,因为它都是强类型的,而客户端(jquery) / javascript)不是吗?
我很期待你的意见。
还有一件事:有可能(他们还不确定)这个功能是否包含在“部分”中,带有地址框并称之为订单。 然后:用户也可以多次添加“部分”,这样他就可以在一个页面中创建多个订单,因此我必须为订单创建多个部分,并且在该订单中可以添加另一个产品。
看起来这个客户端很难做到,特别是在生成id的时候?
答案 0 :(得分:2)
www.ajax.net :)
答案 1 :(得分:1)
添加其他字段在服务器端添加感觉非常错误。
我建议你在页面上放置一个隐藏字段,并将所有字段的数据保存为JSON字符串。在服务器端,您只需使用JavaScriptSerializer
类来反序列化JSON,并将客户端上生成的所有数据作为强类型对象实例获取,这样更好!
但是否则......您使用Javascript添加的所有输入字段都没有服务器端视图状态,但您仍然可以在Request.Form["SomeName"]
中访问它们的值,这意味着您可以为它们提供您喜欢的任何ID /名称只要它们是独一无二的。
我将所有输入字段添加到某个CSS类,如dynamic
,以便更容易收集所有这些字段以生成JSON。此代码将生成应该隐藏在隐藏字段中的JSON对象:
$(".dynamic:input").live("blur", function(e))
{
var jsonData = $(".dynamic:input").serializeArray();
// use some lib or plugin to save it into hidden input field
}
有许多库以及jQuery插件会将此jsonData
对象字符串化为字符串。 This Stackoverflow question有很多可能性。检查答案。
按照 brian brinley 的建议使用 Asp.net AJAX 库会让它们看起来像是在客户端上生成的,但由于普通服务器它仍然会很慢请求将意味着整个视图状态将被转移回服务器,整个页面循环将在返回之前处理。这个库对于严肃的复杂项目来说并不是一个真正的选择,我想多数人会同意。