当前位置: 首页 > news >正文

下载网站的软件茶叶公司商城网站建设

下载网站的软件,茶叶公司商城网站建设,娱乐城网站开发,化妆品网站建设推广方案上一篇中老周给伙伴们介绍了自定义视图搜索路径的方法#xff0c;本篇咱们扯一下有关 URL 路径规则的名称问题。在扯今天的话题之前#xff0c;先补充点东东。在上一篇中设置视图搜索路径时用到三个有序参数#xff1a;{2}{1}{0}#xff0c;分别是 Area、Controller、Actio… 上一篇中老周给伙伴们介绍了自定义视图搜索路径的方法本篇咱们扯一下有关 URL 路径规则的名称问题。在扯今天的话题之前先补充点东东。在上一篇中设置视图搜索路径时用到三个有序参数{2}{1}{0}分别是 Area、Controller、Action。其中说到几个特殊的视图如_Layout.cshtml、_ViewStart.cshtml等。_Layout.cshtml 页默认放在 /Views/Shared 目录下但_ViewStart.cshtml 和 _ViewImports.cshtml 这两个不应该放在 Shared 目录下一般应放到 /Views 下这样它们可以作用于所有的视图。如果放到了 Shared 目录下它们只对 Shared 目录中的视图起作用而对于 Views 下的其他视图不起作用。比如放到 /Views 下。Views目录│  _ViewImports.cshtml│  _ViewStart.cshtml│  └─Home目录Controller的名字Index.cshtml视图Action其中Home 是子目录对应着控制器 HomeHome 中的 Index.cshtml 视图对应着 Action 名 Index。此时_ViewStart 和 _ViewImports 中的内容会应用到 /Views 下的所有视图中如 Index.cshtml。要是改为这样。Views    ├─Home    │      About.cshtml    │      Index.cshtml    │      _ViewImports.cshtml    │      _ViewStart.cshtml    │          └─Users            AddNew.cshtml此时Views 有两个子目录Home 是一个控制器Users 是另一个控制器这时候_ViewStart 和 _ViewImports 只对 Home 下面的视图起作用对 Users 目录下的视图是不起作用的。_ViewStart 主要用途是在所有视图文件执行之前执行一般我们用它来设置 Layout 属性以指定使用的布局页相当于页面母板这样一来我们不需要在每个视图上都加 Layout xxxx 了。_ViewImports 主要是用来引入要用到的命名空间就是 C# 中的 using这样你不需要在每个视图中写一堆 using Razor 标记了。这两个文件都是约定式的所以你不应该随便改它的名字_ViewImports 可以通过 RazorTemplateEngineOptions 类的 ImportsFileName 属性来修改不过_ViewStart 好像不能改老周看到 asp.net core 源码中是写死了的估计是不能改文件名的。其实这两个文件不应该改名而且你改了名字也没啥用反正功能是不变的还是遵守约定好一些这样人家看你的项目时也看得懂。_Layout.cshtml 文件如非必要也不应该改名字如果你的应用要用多个布局视图可能建个子目录然后每个子目录下放_Layout这样结构清晰一些毕竟看到 _Layout.cshtml 就明白它是母板页了。 规则模板我们都知道在 Startup.Configure 方法中会以此方式来指定 URL 路径规则。 app.UseMvc(route {route.MapRoute(main, {controllerStudents}/{actionList}/{sid?});route.MapRoute(edit_post, {controller}-{action});});你可以添加 K 条规则比如上面的例子我添加了两条规则。{controller} 和 {action} 是约定的名称用来识别 Controller 和 Action 所以你不要自作聪明乱来必要有些写死了的参数才能进行 URL 分析不然你给个 URL http://dog.org/shopping/pay/500那应用程序根本不知道哪一段是表示 Controller哪一段是表示 action。如果确定了 controller 和 action 这两个值那么其他的参数就好分析了。其他参数如果是可选的可以在后面加个问号比如 {controller}/{action}/{id?}这表示 id 的值是可选的。上面老周添加的两个规则中edit_post 那个其实不太规范URL 中各段最好用 “/” 来分隔因为 “-” 有时候是不允许用的比如id 参数前面就不能用你不能写成 {controller}-{action}-{id?}要是 id 中包含了字符“-”咋办呢而“/”则不同URL Encode 后不会冒出这个字符来。所以用 / 最好这里用 - 只是老周故意用来演示而已URL 嘛没必要玩花样没意义。 基于 Attribute 指定的 URL 路由在 Startup.Configure 方法中指定的 URL 路由是作用于整个应用程序的如果想为个别控制器或个别 Action 指定路由规则那么可以考虑使用 Attribute 的形式。attribute 形式的路由规则和应用程序级别的规则相似只是在应用级别时用大括号来包裹参数名如 {controller}而在 Attribute 方案中是用中括号的它只能用两个值[controller]、[action]。其他参数也是用大括号。比如[controlloer]/[action]/[id?] 会报错你得改为 [controller]/[action]/{id?}。RouteAttribute 既可以用于 Controller 类型也可能用于单个 Action 方法上。我举个例子像这样。[Route(hello/[controller]/[action])]    public class SomethingController : Controller    {        [Route({name?})]        public IActionResult SayHi(string name)        {            ……        }    }在类上应用用的 Attribute 中可以使用这样的 URL http://localhost:999/hello/something/sayhi 。而在 SayHi 方法上又用了 Route Attribute指定了一个附加参数 name并且是可选的。于是它可以与类上的 Route attribute 合并变成http://localhost:999/hello/something/sayhi/Peter。这时字符串 Peter 会传给 SayHi 方法的 name 参数因为参数的名字与 Route 中的参数名是相同的都叫 name。如果 SayHi 中的参数名不叫 name那你得运用一下 FromRouteAttribute 了。就像这样。 [Route({name?})]        public IActionResult SayHi([FromRoute(Name name)]string who){……}如果你希望 URL 中给 name 传入 int 类型的值你还可以限制它。 [Route({name:int})]其实这些约束条件对应的是 Microsoft.AspNetCore.Routing.Constraints 命名空间下面的类型。 Route DataRoute data 其实就是一个字典存放的就是 URL 路径规则中参数与值的 key-value 对。这个很简单我举个例子你就明白了。咱们就直接用上面那个例子吧。[Route(hello/[controller]/[action])]    public class SomethingController : Controller    {        [Route({name?})]        public IActionResult SayHi([FromRoute(Name name)]string who)        {            return Json(RouteData.Values);        }    }在 SayHi 方法中咱们把 route data 返回。运行应用后输入地址http://localhost/hello/something/sayhi/Tom得到的输出如下不用我解释了吧。 给路由命名上面的都是 F 话本小节才是本文的主题。我们回头看看上面老周举过例的那个 route。 app.UseMvc(route {route.MapRoute(main, {controllerStudents}/{actionList}/{sid?});route.MapRoute(edit_post, {controller}-{action});});每条路由规则都会有自己的 name为啥要命名最直接的理由是为了唯一标识每条规则。除了此因素外我们可以在开发过程中选择使用哪条规则有了 name想找出某条规则就好办了就好比你上学的时候老师点名要么点姓名要么点学号。基于 Attribute 的路由规则也可以命名的例如。 [Route(hello/[controller]/[action], Name prv)]这样就把它命名为 prv 了你还可以这样写。 [Route(hello/[controller]/[action], Name [controller]_[action])]这样也可以用 Controller 和 Action 的名字生成一个唯一的名字比如 Something_SayHi。但是这种方法太动态了好像不那么好操控还是用一个固定的名字好一点。要在开发的时候选择使用指定的 URL 路由需要在 Razor 页中添加 Tag Helper标记帮助类可以扩展 HTML 标记的某些功能。在需要使用 tag helper 的页面或者统一在 _ViewImports.cshtml 页中加入这些指令。addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers格式是这样的类型全路径, 程序集类型写在前面包括 namespace 名程序集名写在后面用逗号分隔。这里用星号*是最爽的它是通配符表示引入所有 tag helper 类型。这样快捷一行代码了事。然后在 HTML 中你这样写。form methodpost          asp-routeedit_post        div classform-group            label asp-forName/label            input asp-forName classform-control/            span asp-validation-forName classtext-danger/span        /div        div classform-group            label asp-forAge/label            input asp-forAge classform-control/            span asp-validation-forAge classtext-danger/span        /div        input asp-forID/        button typesubmit classbtn btn-dark提交/button    /form其他代码你不用看了只看这一句就够了 asp-routeedit_post它的意思就是使用我刚刚定义的那条规则。 route.MapRoute(edit_post, {controller}-{action});所以在运行后就会生成这样的 HTML。 form methodpost action/Students-Editdatadiv classform-group此处省略 1650 个字/form 因为我定义的规则是 {controller}-{action}的形式所以Controller 是 StudentsAction 是 Editdata连起来就是 Students-Editdata。那么这里它为什么能识别出 controller 和 action 的值呢你看看我的代码就知道了。public class StudentsController : Controller    {        readonly StudentDBContext m_context;        // 接收依赖注入        public StudentsController(StudentDBContext c)        {            m_context c;        }        public IActionResult List()        {            var q from s in m_context.Students                    orderby s.ID                    select s;            return View(q.ToList());        }        /***************************************************/        // 以下方法用于编辑页        [HttpGet]        public IActionResult Editdata([FromRoute(Name sid)] int id)        {            var q from s in m_context.Students                    where id s.ID                    select s;            Student stu q.FirstOrDefault();            if(stu null)            {                return Content(在地球上找不到此学员。);            }            return View(stu);        }        [HttpPost]        public IActionResult Editdata(Student s)        {            if (ModelState.IsValid false)            {                return View(s);            }            m_context.Students.Update(s);            m_context.SaveChanges();            return RedirectToAction(nameof(List));        }    }定义了 Editdata 方法的重载一个用于 get 请求一个用于 post 请求form 是以 post 方式提交因此它能自动识别出 controller 和 action 的名字。那万一如果不是同名的呢好办。你用 asp-route-value 来指定各个参数的值。比如这样 form methodpostasp-routeedit_postasp-route-controllerDemoasp-route-actionRunworkasp-route-sid1在 asp-route- 后面直接跟上路由规则参数的名称就可以了。 有一点要注意asp-route 与 asp-controller、asp-action是会冲突的如果你用了这两个标记就不能用 asp-route 标记了当然 asp-route-xxx 是可以用的。好了今天的内容就扯到这儿了顺便把示例的代码也传上来以供伙伴们娱乐。https://files.cnblogs.com/files/tcjiaan/NamedRouteSample.zip原文地址:https://www.cnblogs.com/tcjiaan/p/8439178.html.NET社区新闻深度好文欢迎访问公众号文章汇总 http://www.csharpkit.com
http://www.yutouwan.com/news/45355/

相关文章:

  • 做美足网站违法吗免费申请qq号注册官网
  • 南方科技大学网站建设怎么做特色网站
  • 网站访问量的单位如何做品牌推广网站
  • 精品网站建设费用 地址磐石网络discuz和WordPress哪个更好
  • 在青岛做阿里巴巴网站找谁哪里可以做游戏视频网站
  • 企业网站推广的方式有哪些WordPress苏醒模板免费
  • 网站seo注意事项创意网站建设设计公司
  • 商务网站建设的六个步骤网站建设既有书籍又有光盘
  • 邮轮哪个网站是可以做特价胃肠的wordpress 安全漏洞
  • 网站内容优化网站大图片优化
  • 买app的网站建设枣庄建设工程管理局网站
  • 在网站做推广属于广告费吗wordpress迁移空间后无法显示图片
  • 苏州企业网站建设公司价格网站备案需要去哪里
  • 温州建设银行支行网站上海专业网站建站品
  • 网站建设教程免费夕滋湖南岚鸿官网linux下可以用wordpress
  • 网站建设过程规划和准备阶段网络营销方法有哪几种
  • 大学生个人网站怎么做那些网站做的非常好看
  • 域名 不做网站泉州免费建站模板
  • 网站建设管理规定门户网站建设调查问卷
  • 比较容易做的网站暖暖 视频 在线 观看 高清
  • 适合在线做笔试的网站网站备案密码收不到
  • 温州哪里可以做企业网站网站如果直接点击拨打电话
  • 竞价网站单页怎么样做电影网站
  • 企业网站建设方案 wordphp美食网站开发背景
  • phpstudy 网站空白北滘大良网站制作
  • 做第一个php网站深圳电器公司是国企吗
  • ppt模板免费下载网站哪个好徐州公司网站制作
  • 深圳网站seo 乐云践新贵州新闻
  • 用js做的网站代码吗做网站流程 优帮云
  • 红包打赏的网站怎么做网站建设SEO优化哪家好