按自己的理解,总结下最近学习的MVC内容,错误的地方还希望各位高手指点
MVC其实原理
其流程为:URL(用户输入的地址)—>routes(路线地址加工寻找正确的地址)—>Controllers(控制器,用其内部的方法与名字相同的页面一一对应,这些方法统称Action)—>Models(获取数据库数据)—>View(返回页面)
M 即Model(模型层),主要负责出来业务逻辑以及数据库的交互
V 即View(视图层),主要用于显示数据和提交数据
C 即Controller(控制器),主要是用作捕获请求并控制请求转发
R 即页面地址解析是由routes来进行的
表单递交
方法1.<% using (Html.BeginForm("Html", "Home"))//是HOME而不是HomeController
{ %>
请输入用户名:<% =Html.TextBox("Name")%>
请输入密码:<% =Html.Password("Name")%>
<input id="Submit1" type="submit" value="submit" />
<%} %>
方法2.
<form id="form1" method="post" action="
<%=Html.AttributeEncode(Url.Action("Html","Beta")) %>">//Beta为控制器,Html为Action
</form>
传值
1.由控制器传值给页面:
Controllers方面(在相应的Action里):
ViewData["test"] = "HOLLE";
View方面(在需要输出的位置):
<div><% =Html.Encode(ViewData["test"])%></div>
2.由页面用表单传值给控制器:
方法1.自动映射
使用这种方法,我们只需要把相应的Action方法的参数名字定义为控件的名称,ASP.NET MVC Framework将会自动帮助我们进行映射,直接把表单的数据赋值给form的Action所对应的方法参数上,
01 |
public ActionResult Test( string Textbox1, string Textbox2) //Textbox1,Textbox2为表单里控件的名称 |
02 |
{ |
03 |
if (Request.HttpMethod == "POST" ) |
04 |
{ |
05 |
ViewData[ "test" ] = a; |
06 |
} |
07 |
else |
08 |
{ |
09 |
ViewData[ "test" ] = aa; |
10 |
} |
11 |
return View(); |
12 |
} |
方法2.窗体函数获取
String=Request.Form["Textbox1"];
HtmlHelper扩展
自定义一个类
01 |
using System; |
02 |
using System.IO; |
03 |
using System.Runtime.CompilerServices; |
04 |
using System.Web; |
05 |
using System.Web.Mvc; |
06 |
using System.Web.Routing; |
07 |
|
08 |
namespace System.Web.Mvc.Html |
09 |
{ |
10 |
public static class Test |
11 |
{ |
12 |
public static void test( this HtmlHelper html, string names, string name, string value) |
13 |
{ |
1 |
return string .Format( "<label for='{0}'>{1}</label><br />" , name, value); |
1 |
} |
2 |
} |
3 |
} |
4 |
对于这个类,我很奇怪其不是什么继承接口之类的,而是方法参数里加了个 this HtmlHelper html就算是成了,没见过,很是不解。 |
return string.Format("<label for='{0}'>{1}</label><br />", name, value);这个就是直接创建自己想要的label标签以及参数
其原理是,先由一个类动态的加载上面的方法到HtmlHelper类里,然后可以自己在View页面里用Html.test("",""),动态生成HTML代码以及参数填充。