公司项目转用MVC开发,故学习总结一下mvc会用到的常用传值方法:
正如大家都熟悉的,MVC路由及运行机制是:
首先,Web 浏览器向服务器发送一条URL 请求,如http://localhost:10080/Home/Register,也就是(http://HostName/ControllerName/ActionName/Parameters)。
其次,请求被ASP. NET MVC 的路由映射系统获取,并按照映射规则, 解析出 ControllerName,ActionName 和Parameters;
再次,到Controllers 目录下找到ControllerNameController.cs 类, 并在这个类中找到与 ActionName 同名的方法,将Parameters 作为参数传给这个方法;
最后,Action 方法开始执行,完成后将返回相应视图
经查阅学习到四种传值方式,根据不同情况下具体运用
一、Request
1. Request.Form:获取以Post方式提交的数据(接受Form提交来的数据)
(1)View视图下:post方式提交数据
<% Html.BeginForm("Register", "Home", FormMethod.Post); %>或
<form id="register" action="/Home/Register" method="post">
(2)Controller控制器下:Request获取数据
Request.Form[""].ToString();
2. Request.QueryString:获取地址栏参数(及以Get方式提交的数据)
js文件代码,如下:
<script type="”text/javascript”">
Function getJsonResourceBaseList()
{
Var param={param1:"",param2:"",param3:""};
Param.param1="123;
Param.param2="456;
Param.param3="789";
$.getJSON("/ResourceBase/getJOSNResourceBaseList", param,function (data) {
//具体方法操作
}
</script>
(1).aspx页面代码
$(document).ready(function () {
getJOSNResourceBaseList();
}
(2).Controller文件中获取JS方法中的参数(ResourceBaseController下的getJOSNResourceBaseList方法)
Request.QueryString["param1"];
Request.QueryString["param2"];
Request.QueryString["param3"];
3. Dictionary
(1) 在控制器赋值:
Dictionary<string,object> userModel = newDictionary<string,object>();
userModel.Add("UserID", “123”);
userModel.Add("UserName", “456”);
ViewData["UserData"] = userModel;
(2)在视图页面取值:
<% Dictionary<string, object> UserModel = ViewData["UserData"]as Dictionary<string,object>; %>
<%=Html.TextBox("txtUserName", UserModel["UserName"].ToString())%>
接下来讲两种强类型数据的传递方法, ViewData 和 Dynamic
注意:ResourceBaseEditModelService.GetEditModelByID返回类型为ResourceBaseEditModel
ResourceBaseEditModel是一个数据实体类型如:
public class ResourceBaseModel
{ public Guid Id{ get; set;} }
4. ViewData 把强类型的ViewData对象从控制器传递给视图,这里只讲强类型对象的传递
(1)在控制器中赋值:
ViewData["editModel"] =ResourceBaseEditModelService.GetEditModelByID(TempDeviceID.Value);
(2)在视图页面取值:
<% ResourceBaseEditModel localModel = ViewData["Local"]as ResourceBaseEditModel;%>
<%=Html.TextBox("txtDeviceID", localModel.Id%>
5. Dynamic
(1)在控制器赋值:
ResourceBaseEditModel model = ResourceBaseEditModelService.GetEditModelByID(TempDeviceID.Value);
dynamic viewModel = new ExpandoObject();
viewModel.UserID = model.Id;
viewModel.UserName = model.name;
return View(viewModel);
(2)在视图页面取值:
<% @Page Language="C#" Inherits="System.Web.Mvc.ViewPage<dynamic>" %>
<%= Html.TextBox("txtUserName", (string)Model.name) %>
<%= Html.TextBox("txtUserId", (string)Model.Id) %>