龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > web编程 > asp.net编程 >

ASP.NET MVC学习Controller与View数据传递(2)

时间:2009-12-21 11:47来源:未知 作者:admin 点击:
分享到:
二、 View 向 Controller 传递数据 在 ASP.NET MVC 中,将 View 中的数据传递到控制器中,主要通过发送表单的方式来实现。具体的方式有: 1. 通过 Request.Form 读取

二、ViewController传递数据

ASP.NET MVC中,将View中的数据传递到控制器中,主要通过发送表单的方式来实现。具体的方式有:

1.         通过Request.Form读取表单数据

我们在View层做如下定义:

<% using (Html.BeginForm("ActionName", "ControllerName"))

       { %>

    UserName<% Html.TextBox("UserName"); %>

    Password<% Html.TextBox("Password"); %>

<%} %>

注意:ActionName为对应的Action名,ControllerName为对应的Controller名称

然后在Controller层,通过Request.Form读取表单数据的代码如下所示:

[AcceptVerbs(HttpVerbs.Post)]

        public ActionResult ActionName()

        {

            string username = Request.Form["UserName"];

            string password = Request.Form["Password"];

            return View();

}

2.       通过FormCollection读取表单数据

我们在View层做如下定义:

<% using (Html.BeginForm("ActionName", "ControllerName"))

       { %>

    UserName<% Html.TextBox("UserName"); %>

    Password<% Html.TextBox("Password"); %>

<%} %>

然后在Controller层,通过FormCollection读取表单数据的代码如下所示:

[AcceptVerbs(HttpVerbs.Post)]

        public ActionResult ActionName(FormCollection formCollection)

        {

            string username = formCollection["UserName"];

            string password = formCollection["Password"];

            return View();

        }

 3.       自定义数据绑定


自定义数据绑定的方法如下:创建一个自定义数据绑定类,让这个类继承自IModelBinder,实现该接口中的BindModel方法。
由于写作仓促,代码未列出。敬请见谅。
 

总结:虽然我们可以通过Request.FormFormCollection方式读取表单数据,可是通常这两种方式都比较繁琐,在强类型View的情况下,我们通常会使用Controller 基类的内置方法UpdateModel(),该方法支持使用传入的表单参数更新对象的属性,它使用反射机制来解析对象的属性名称,接着基于客户端传入的参数值自动赋值给对象相关属性。

以下是我写的一个Demo的一段使用UpdateModel的代码例子:

使用UpdateModel()的代码例子
Code [http://www.xueit.com]
[AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Edit(int id, FormCollection collection)
        {
            //Users user = userRepository.GetUser(id);
            //user.UserName = Request.Form["UserName"];
            //user.Password = Request.Form["Password"];
            //user.Telephone = Request.Form["Telephone"];
            //user.Address = Request.Form["Address"];
            //上述方法有一点繁琐,特别是增加异常处理逻辑之后。一个更好的方法是使用Controller 基类的内置方法UpdateModel()。该方法支持使用传入的表单参数更新对象的属性,它使用反射机制来解析对象的属性名称,接着基于客户端传入的参数值自动赋值给对象相关属性。
            Users user = userRepository.GetUser(id);
            string[] allowedProperties = new[] { "UserName", "Password", "Telephone", "Address" };
                UpdateModel(user, allowedProperties);
                userRepository.Save();

                return RedirectToAction("Details", new { id = user.ID });
        }

 

作者:深山老林
出处:http://wlb.cnblogs.com/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
精彩图集

赞助商链接