首先想再补充一下集锦(1)中 的扩展htmlhelper问题,其实在C#3.0,就已经提供了扩展方法这个新特性,我们可以在程序中扩展一些基本类型,也可以扩展一些自定义类型。例 如:String,Datetime ,Enumerable等,具体步骤与扩展htmlhelper没什么区别(还是提醒一下别忘记引用命名空间)。
继续(1)中的顺序往下进行吧.
5.在view与Mvc view user control中使用强类型。
在view 或 Mvc view user control中的代码如下
在controller中需要将Model赋值
顺便一提:
当我需要呈现View的时候我会选择 return View()
当我需要ajax异步请求到controller做一些事情时,处理结束后,我会通过 return Json() 返回操作是否成功或返回的数据。
当我需要调用其他action时我会使用 RedirectToAction 或 RedirectToRoute。
当我什么都不需要做的时候我会使用 EmptyResult()。例如数据导出操作等。
6.UpdateModel与TryUpdateModel
虽然在MVC 中可以直接在Controller的方法中定义操作对象,然后通过表单提交装入数据到对象,如下:
但 我会使用UpdateModel和TryUpdateModel去做这些事情,还是简单说一下这两个方法的功能。如果用户操作的view是完成注册用户功 能,此时表单数据已经填写完整,提交表单后转入上面的方法( Register() , 去掉参数),在方法中使用如下代码:
这样表单中的数据可以装入 account 对象,后来发现有时总是不成功,程序报错,遂发现TryUpdateModel(),虽然执行后也会有错误,但是部分数据已经正确填入程序也并不会报错, 然后将没有填入的数据(问题就发生在这些数据上)单独处理。不能装入的数据通常都是由规律的,例如ID,view中通过DropDownList选择的数 据等等,所以可以使用重载方法将可能会出错的数据排除掉, string[] excludeProperties 参数,这样TryUpdateModel就不会报错了,虽然已经找到装入对象时出错的规律,但还是想找到更准确的判断方法,不想这样偷懒下去。偶然间注意 到 ModelState.IsValid 这句经常出现的代码,所以就试了一下,在TryUpdateModel语句执行后,在快速监视中添加了ModelState,果然可以看到出错的字段(里 面有error属性)。后面的操作就是一样的了,排除这些字段,单独处理!
7.在Action中使用FormCollection,6中使用 string[] excludeProperties 参数排除掉的字段可以通过下面的方法赋值