.net MVC简介、项目中每个文件夹的功能

MVC是微软2009对外公布的第一个开源的表示层框架,这是微软的第一个开源项目

M:viewmodel  V:视图  c:控制器

App_Data:一个比较特殊的文件夹,把文件放到这个文件夹,通过地址访问是访问不到的,ASP.NET会帮我们屏蔽掉。通常放一些数据库文件、xml配置文件以防止数据泄露

Content:一般放CSS样式、样式图片

Controllers:放控制器文件

Models:放ViewsModels

Scripts:放js、JQ

Views:放视图的文件夹

Global.asax:全局应用程序

RouteConfig:路由的配置

伪静态:

            routes.MapRoute(
                "Default2",
                "{controller}-{action}.html",//记得在IIS添加映射 处理成映射--添加托管处理程序  *.html/System.Web.UI.PageHandlerFactory/name
                new { controller = "Home", action = "Index"}
            );

传值:通过viewData传值

控制器:

复制代码
        /// <summary>
        /// 得到实体
        /// </summary>
        /// <param name="Account">账号</param>
        /// <param name="password">密码</param>
        /// <returns></returns>
        public MTManagementTools.Model.ToolMember GetModel(string Account, string password)
        {

            StringBuilder strSql = new StringBuilder();
            strSql.Append("select  top 1 ID,Account,PassWord,MenuIDs,Name,Sex,Phone,Address,QQ,IsDel from MtToolMember ");
            strSql.Append(" where Account=@Account and PassWord=@PassWord and IsDel=0");
            SqlParameter[] parameters = {
                    new SqlParameter("@Account", Account),
                    new SqlParameter("@PassWord", password)
            };

            MTManagementTools.Model.ToolMember model = new MTManagementTools.Model.ToolMember();
            DataSet ds = DbHelperSQL.Query(strSql.ToString(), parameters);
            if (ds.Tables[0].Rows.Count > 0)
            {
                return DataRowToModel(ds.Tables[0].Rows[0]);
            }
            else
            {
                return null;
            }
        }
复制代码

前台视图:

视图传给控制器

控制器:

1、控制器参数的名字和前台name的名字对应上,就会自动识别

2、控制器参数如果是对象,对象属性的和name对应上,也会自动识别

 前台传递

当一个控制器有两个同名方法的时候  在方法上一行加上标记用来区分[httpGet]  [HttpPost] 

Shared文件,所有的控制器都可以使用的文件夹,母版页就放在这 文件内

传值有好几种方式  viewbag viewdata  tempdate  model

同ViewData和ViewBag一样,TempData也可以用来向视图传递数据。只是ViewData和ViewBag的生命周期和View相同,只对当前View有用。而TempData则可以在不同的Action中进行传值,类似webform里的Seesion。
TempData["abc"] = "this is tempdata";
<p>@TempData["abc"]</p>

跳转

return RedirectToAction("action","controller")
return RedirectToAction("action","controller",RouteValue)

比如:
return RedirectToAction("Index","Home")
return RedirectToAction("Index","Home",new {参数1=xx,参数2=xxx})

 11、区分post get请求

在控制器上加标签[HttpPost] (只能接收psot请求)  或者 [get]

12、MVC自带的校验

View Code

 13、html.beginform    自带的ajax表单 beiginajaxfrom

14、母版页

@RenderBody()  :只能添加一个此方法,如果还想多挖几个坑,用下面的方法

@RenderSection("Name")、@RenderSection("Name",false) 第二个参数是指这个坑是否必填,默认true 必填

15、DB.UserInfo. 点不出where

没有引用entity的dll 而且dal和model的版本dll一定要一直,版本不一致解决起来非常麻烦,建议删除重建

NuGet 配置文件信息packages.config

16、在MVC的controller中不能直接跳转,控制器必须有一个返回结果(进行基类验证的时候,正常控制器中可以)

//  filterContext.HttpContext.Response.Redirect("/Login/Index");
 filterContext.Result = Redirect("/Login/Index");//注意.
View Code

17、controller调用两次

不知道为什么 引用路径写错了 就会调用两次controller
导致报错,空值,找不到对象等
错误:

@Styles.Render("ueditorcss")
@Scripts.Render("~/bundles/ueditorjs")

正确:

@Styles.Render("~/bundles/ueditorcss")
@Scripts.Render("~/bundles/ueditorjs")

网上说如果有img元素,并且元素的src值是 ""或者# 也会调用两次,(我没发现)

MVC区域 如果在区域中调用/跳转非区域的控制器

如果是在根目录下area就写空

如果是在区域下area就写对应的area名字

<a href="@Url.Action("Detail", "../Article", new { id = item.ID })" target="_blank">阅读全文</a>
<li><a  href="@Url.Action("Index","Home", new {area="" })"><span>首页</span></a></li>
<li><a  href="@Url.Action("Index", "Goods", new {area="areaname" })"><span>其他信息</span></a></li>

 csrf

  • 在cshtml页面的form标签里加上@Html.AntiForgeryToken()
  • 在Controller需要防范CSRF的Action上加上[ValidateAntiForgeryToken]注解
原文地址:https://www.cnblogs.com/sky6699/p/12869662.html