zoukankan      html  css  js  c++  java
  • mvc

    MVC:要求安装:vs2008和MVC(http://www.asp.net/mvc

    新建项目:Web-ASP.NET MVC Web Application(使用ASP.NET MVC FrameWork 1.0,不是MVC2的版本)

    初始目录:Models(空),Views(包括Account、Home、Shared),Controllers
    文件包含:Views-Home下,包括About.aspx,Index.aspx,Controllers下,包括AccountController.cs,HomeController.cs

    1。地址解释http://localhost:3214/Home/Index
    Home为Controller,Index为Action(函数),即调用HomeController.cs下的Index函数:
    public ActionResult Index()
    {
        ViewData["Message"] = "Welcome to ASP.NET MVC!";
        return View();  //无参数,显示对应的Index.aspx页。如果使用return View("about");则显示Views-Home下的About.aspx页。
    }
    Index.aspx:<%= Html.Encode(ViewData["Message"]) %>

    2。页面的显示,是能过向服务器发送URL请求,由Controller接收,通过Controller来控制去显示哪一个Views(aspx)。
    Models用来和数据库做交互,使用ORM,将数据库映射成类/对象,一般使用Linq来写访问语句。

    3。ViewData的使用。在Controller下的Action中定义ViewData,在aspx中通过ViewData["keyword"]来读取。
    对于简单的类型,可以直接显示,如字符串,可以直接用<%= ViewData["mystr"] %>。对于复杂一点的,如List<string>,在aspx页中要这样写:
    <% foreach(string str in ViewData["myList"] as List<string> { %>
     <%= str %>
    <%}%>
    也可以加上HTML标记,如UL,来显示。

    4。TempData的使用。用法类似ViewData,但可以跨视图,且只能保存一次。
    如在Index()中使用:
    TempData["mytmp"] = "my temp data";
    Response.Redirect("/home/about");
    可以在about.aspx中接收到<%= TempData["mytmp"] %>,但当再次点击about的链接时(不是通过Index的Action来跳转),数据已经不存在了。

    5。用ViewData传递对象实体。在Index()中:
    NewsInfo info = new NewsInfo();
    info.NewsId = 1;
    info.NewsTitle = "newstitle";
    ViewData["myNews"] = info;
    在Index.aspx中读取对象的属性: <%= (ViewData["myNews"] as MyMVCAppName.NewsInfo).NewsTitle %>

    6。新建页面
     A。新建一个Controller。右键Controllers文件夹,添加-Controller...。比如要加一个叫Edit的页,应该在这里新建一个Edit方法。
     B。新建一个View。右键Views文件夹,添加一个叫News的文件夹,右键添加View...,名字叫做Edit。得到的访问的路径就是/News/Edit。

    7。在Action中重定向
    可以用Response.Redirect("/Home/About");,或者return Redirect("/Home/About");,或者return RedirectToAction("About","Home");  //Action,Controller

    8。URL解释规则
    在Global.asax.cs中,找到RegisterRoutes方法:
    routes.MapRoute(
    "Default", //Route名称
    "{controller}/{action}/{id}", //URL格式规则
    new { controller = "Home", action = "Index", id = "" } //默认值,如,当controller参数为空时,默认为Home
    如果把{action}改成{action}.mystr,则原来的/News/Index这种URL就无法访问,而要用/News/Index.mystr去访问了。

    9。MVC不推荐用原来的服务器件,页面显示一般使用helper类,主要有Html和Url。
    如: <%= Html.ActionLink("aboutpage","about","home") %>或<%= Url.Action("myAction") %>

    10。filter过滤器,可以在请求页的Action时做一些处理。
    新建一个类,让它继承于System.Web.Mvc.ActionFilterAttribute。override以下方法:
    OnActionExecuting,在Action之前发生,比如验证用户是否登录,跳转页。OnActionExecuted在Action之后发生,做数据善后工作。
    OnResultExecuting,在Return之前发生(目前只学习到了Return View()这一种),OnResultExecuted,在Return之后发生。
    例子:
    A。在OnActionExecuting方法中添加: if (filterContext.HttpContext.Request.QueryString["k"] != "go") throw new Exception("this is a error");
    B。在要应用的Controller中,添加这个filter,如在NewsController.cs中,在类定义的上一行或Index的Action的上一行添加[MyMVCAppName.Code.Filter]。
    (项目名.文件夹.类名),将整个类或某个Action应用上这个Filter。
    这时,如果访问/News/Index,会出现自定义的错误。正确的路径应该是/News/Index?k=go或/News/Index/k=go

    11。QueryString传值
    在Action函数中可以这样写:ViewData['w"] = Request.QueryString["key"]; 然后在aspx中用<%= ViewData["w"] %>显示。
    比如用这个方法写一个链接,把参数传过去:<%= Html.ActionLink("EditPage","edit","news", new { key="myParaValue"}, new { @class="cssClassName" }%>。
    这个是访问NewsController下的Edit方法,并把名称为key的参数传过去,这个链接应用了cssClassName这个样式。
    或者用更简单的方法,直接在Action函数中,把同名的key当作参数写进去。如:public ActionResult Edit(string key)  { ViewData["w"] = key; ... }。
    注意,这个参数名要和Request.QueryString的参数名一样。

    12。表单Post传值,Edit.aspx中写一个Form:
    <%using (Html.BeginForm("Index","News", FormMethod.Post)) {%>
      NewsId:<%=Html.TextBox("tbNewsId", "1001", new { style="150px;" })%>
      NewsTitle:<% =Html.TextBox("tbNewsTitle", "新闻标题", new { style = "150px;" })%>
      <input type="submit" value="提 交" />
    <% Html.EndForm(); }%>
    NewsController.cs:
    public ActionResult Index(string tbNewsId)
    {
        string NewsTitle = Request.Form["tbNewsTitle"];
        ViewData["w"] = NewsTitle + "," + tbNewsId;
        return View();
    }
    还有另一种更简单的方法,使用UpdateModel方法(实体的字段名称要和控件的ID值相同,比如要么都是NewsTitle,要么都是tbNewsTitle):
    public ActionResult Index()
    {
        NewsInfo info = new NewsInfo();
        UpdateModel(info, Request.Form.AllKeys);
        ViewData["w"] = info.NewsTitle + "," + info.NewsId;
        return View();
    }

  • 相关阅读:
    需要做一个 Android客户端 访问 服务器数据库 的 Demo
    如何使用Device File Explorer 从计算机拷贝文件到模拟器/手机?
    Android Studio 3.0 正式版 初体验
    Android Studio 原生模拟器, DDMS data打不开,adb shell 修改权限遇到:/system/bin/sh: su: not found
    2017.9.6 实验课:安装环境遇到的问题总结
    IntelliJ IDEA
    移动终端
    关于编程~
    2018面向对象程序设计(Java)第18周学习指导及要求
    2018面向对象程序设计(Java)第17周学习指导及要求
  • 原文地址:https://www.cnblogs.com/vipcjob/p/1743456.html
Copyright © 2011-2022 走看看