一、Form Basics
普通的web框架是没有简单并且灵活的形式处理,但是VICI提供了这些,远远地抛弃了在asp.net中臭名昭著的视图状态。
二、How forms work in Vici MVC
在HTML中form是定义在<form>标签内的控件集合,它可以通过点击<submit>按钮提交到服务器。若要查看发布窗体的内容,您可以可以阅读 PostData 集合,其中直接映射到 ASP.net的 Request.Form 集合。 虽然这是一种查看表单数据的简便方法,如果您要在窗体中设置控件的初始数值,并在回发间保持控件的状态的值,那么它就会变得复杂。
在VICI MVC中,这些受 WebForm类的管理。您只需创建一个 WebForm 派生的类,并且添加成员用于检索和在html中可以显示。告诉MVC那种类型的控件应呈现该成员和应该做什么样的验证。
模版应该这么写:
What happens in the controller's action method is:
1、WebForm派生类建立了俩个<textbox>
2、这俩个<textbox>默认值都为空
3、form通过bind()方法绑定到当前视图
4、当form表单提交到服务器 Validated属性将返回真
5、当第一次控制器方法执行的时候Validated属性为假,form正常显示(也就是第一次载入不执行返回值处理)
6、当用户点击submit按钮后,处理方法将执行bind()方法将会返回由用户输入的值。
7、Validated返回真,并且正常显示result
三、Setting the initial values of the controls
若要设置窗体的初始数值,你应该重写 WebForm 类的 OnFill 方法。第一次,将调用此方法显示窗体。
四、 Retrieving user input (postback)
你可以在任何时候让 HTML 窗体提交到原始 URL。通过这种方式的 WebForm 派生的对象将正确处理用户输入的数据和被保留的状态。
要捕获发布的数据,您不必做任何事情。你只需要检查 WebForm 类的验证属性,如果那是真的,窗体已经提交,并且用户输入已经经过验证。 捕获发送的字段的另一种方法是通过重写的 OnPost 方法。此方法已经经过验证,当所以的验证都为真时他的一个参数也为真。当您将一个窗体对象绑定到一个从数据库中读取的数据对象时,通常可以使用这种情况下:
在您的控制器类中您应该这么写
请注意到了 MVC 2.0 版中有没有自动数据绑定。应将从代码中的数据对象的值设置窗体的字段。这是有可能将框架的下一版本中添加的功能。
五、 Input validation
如上文所述,MVC 在窗体对象上执行验证。有 3 种方式来验证窗体,以及他们可以随意组合:
- Validation attributes on fields
- Validation methods for specific fields
- Validation method for the complete form
Validation的具体内容我们会在下一章讲
六、Supported controls
- [FormTextBox]
- [FormDropdown]
- [FormPassword]
- [FormEMail]
- [FormHidden]
- [FormCheckbox]
- [FormDate]
- [FormMemo]
- [FormRadioButton]
你可以建立自己controls把它绑定到窗体。
七、Binding data to list controls
现在我们只是会简单的textbox,如果是 dropdown或者其他的控件我们该这么办了?
为此目的,我们可以重写OnBind()方法。该方法会在视图呈现前调用。这也意味着窗体的类中的字段已经有了正确的值(初始化的 OnFill 或用户提交的)和实际的控件也已创建。
每个控件都有一个数据源的属性,应设置为该控件所需的数据
例如:
如果您想直接访问该控件,您可以读取该字段的控件属性:
八、 Styling controls with CSS
[[ControlName]]这是基本的表示方法,还有更复杂的:
[[ControlName:CssClass:CssClassError]]
未完待续: