使用List集合形式的参数的批量 *** 作
如果使用List集合来进行批量 *** 作,首先要把待添加的数据与实体类对应(一个实体类通常对应数据库里的一张表, 下面的例子中Actor类就是一个实体类, 它对应了数据库中的 "t_actor"数据表).
比如"t_actor"数据表中有id,first_name,last_name三个字段, 那么对应Actor类就要有id, firstName, lastName属性, 且都得有getter, setter方法.
spring jdbc core 包中提供了一个SqlParamterSource 对象,这个对象用于SQL语句参数的设置.
使用SqlParameterSourceUtils.createBatch这个方法,把javabean(即上面说的实体类)的list 转化成array,spring会循环的进行取值;
public class JdbcActorDao implements ActorDao {private NamedParameterTemplate namedParameterJdbcTemplate
public void setDataSource(DataSource dataSource) {
this.namedParameterJdbcTemplate = new NamedParameterJdbcTemplate(dataSource)
}
public int[] batchUpdate(final List<Actor> actors) {
SqlParameterSource[] batch = SqlParameterSourceUtils.createBatch(actors.toArray())
int[] insertCounts = namedParameterJdbcTemplate.batchUpdate(
"INSERT INTO t_actor (id,first_name,last_name) VALUES(:id,:firstName, :lastName )",batch)
return insertCounts
}
// ... additional methods
}
http://www.tuicool.com/articles/Ar6RNr
选择Microsoft.Web.Mvc.DataAnnotations.dll程序集和System.ComponentModel.DataAnnotations.dll程序集并点击确定按钮。不能和数据注释模型绑定器一起使用.NET Framework Service Pack 1里面包含的System.ComponentModel.DataAnnotations.dll程序集,你必须使用下载的例子里的包含的System.ComponentModel.DataAnnotations.dll版本。
最后,你需要在Global.asax文件里面注册数据注释模型绑定器。添加下面的代码到Application_Start()事件里:
protected void Application_Start()
{
RegisterRoutes(RouteTable.Routes)
ModelBinders.Binders.DefaultBinder = new Microsoft.Web.Mvc.DataAnnotations.DataAnnotationsModelBinder()
}
这些代码将ataAnnotationsModelBinder注册成为整个ASP.NET MVC应用的默认模型绑定器。
在使用数据注释模型绑定器的时候,要使用验证器特性来执行验证。System.ComponentModel.DataAnnotations命名空间包含了下面的验证特性:
Range--允许你验证一个属性的值是否在一个特定的值范围。
RegularExpression--允许你验证一个属性的值是否符合你个特定的正则表达式模式。
Required--允许你标记一个属性为必须的。
StringLength--允许你指定一个字符串属性的最大长度。
Validation--所有验证器特性的基类。
如果这些标准验证器无法满足你的需要,那么你可以通过继承基验证特性来实现一个新的验证器特性这种方式来创建一个自定义的验证器特性。
清单1的Product类说明了如何使用这些验证器特性。Name、Description和UnitPrice特性被标志为必须的。Name特性必须是一个长度小于10个字母的字符串。最后,UnitPrice属性必须匹配一个表示当前数量的正则表达式模式。
using System.ComponentModel
using System.ComponentModel.DataAnnotations
namespace MvcApplication1.Models
{
public class Product
{
public int Id { getset}
[Required]
[StringLength(10)]
public string Name { getset}
[Required]
public string Description { getset}
[DisplayName("Price")]
[Required]
[RegularExpression(@"^\$?\d+(\.(\d{2}))?$")]
public decimal UnitPrice { getset}
}
}
清单 1: Models\Product.cs
Product类说明了如何使用一个额外的特性:DisplayName特性。DisplayName特性允许你在修改属性在错误消息里显示的名称。与现实错误消息"UnitPrice字段不能为空"相反,你可以显示"Price字段是必填项"。
如果你想要完全自定义显示在验证器上面的错误消息,那么你可以将一个自定义错误消息像这样子赋值到验证器的ErrorMessage属性:<Required(ErrorMessage:="This field needs a value!")>
你可以使用清单1的Product类和清单2的Create()控制器行为。这个控制器行为在模型状态包含任何错误的时候重新显示了Create视图。
using System.Web.Mvc
using MvcApplication1.Models
namespace MvcApplication1.Controllers
{
public class ProductController : Controller
{
//
// GET: /Product/Create
public ActionResult Create()
{
return View()
}
可以直接在控制器中将DataTable返回到对应视图中,也可以将DataTable转换到List中通过ViewData或者ViewBag在对应视图进行调用.(1)直接返回DataTable
Controller代码:
public ActionResult ShopTable()
{
DataTable dt = ***//取出你获取到的DataTable
if(dt.Rows.Count>0) return View(dt)
return View("Index")
}
ShopTable.cshtml页面代码:
@model System.Data.DataTable
@foreach(System.Data.DataRow dr in model )
{
@dr["ID"] @(",") @dr["content"] <br />
}
(2)转换到List中通过ViewData在对应视图调用
Controller代码:
public ActionResult ShopTable()
{
List<string>contentList = ***//将你取到的DataTable中的content存入List返回回来
ViewData.add("ContentList",contentList)
return View()
}
ShopTable.cshtml页面代码:
@foreach(string content in ViewData["ContentList"] as List<string>)
{
@content <br />
}
ViewBag的使用跟ViewData类似.不过在视图中不用将取出的数据进行类型转化.
相对于ViewData使用会方便些
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)