GVKun编程网logo

asp.net – 相当于Sitecore中的Razor Section Helper(asp.net core razor pages)

23

想了解asp.net–相当于Sitecore中的RazorSectionHelper的新动态吗?本文将为您提供详细的信息,我们还将为您解答关于asp.netcorerazorpages的相关问题,此外

想了解asp.net – 相当于Sitecore中的Razor Section Helper的新动态吗?本文将为您提供详细的信息,我们还将为您解答关于asp.net core razor pages的相关问题,此外,我们还将为您介绍关于 How To Set a NLS Session Parameter At Database Or Schema Level For All Connections?、asp.net core razor自定义taghelper、asp.net core razor自定义taghelper的方法、Asp.Net Core 学习教程2、使用ASP.NET Core中的RazorPages的新知识。

本文目录一览:

asp.net – 相当于Sitecore中的Razor Section Helper(asp.net core razor pages)

asp.net – 相当于Sitecore中的Razor Section Helper(asp.net core razor pages)

我试图在Sitecore的不同页面上包含不同的脚本,似乎无法找到一个非常好的方法来做到这一点.在一个普通的mvc项目中,我可以添加@Section {}帮助器,并在不同的局部视图上使用它来指定布局视图中我想要这些脚本的位置,但是我无法找到Razor助手的方式的等价物是使用Sitecore实现的.我想在不使用占位符的情况下执行此操作,每次需要添加脚本文件时,我都不想在Sitecore中添加视图.

提前致谢.

解决方法

我在当前的Sitecore MVC解决方案中设置它的方式是我的布局在关闭body标签之前的底部有一个扩展方法调用RenderScripts().

@Html.RenderScripts()

该扩展方法如下所示:

public static IHtmlString RenderScripts(this HtmlHelper htmlHelper)
    {
       var templates = (from object key in htmlHelper.ViewContext.HttpContext.Items.Keys 
                        where key.ToString().StartsWith("_script_") 
                        select htmlHelper.ViewContext.HttpContext.Items[key]).OfType<Func<object,HelperResult>>()
                            .Select(template => template(null)).ToList();
        foreach (var template in templates)
        {
            htmlHelper.ViewContext.Writer.Write(template);
        }
        return MvcHtmlString.Empty;
    }

然后在每个MVC Razor View上,当我想要包含特定于该渲染的.js文件时,我在文件的底部调用类似下面的内容:

@Html.Script(
        @<script src="@Url.Content("~/js/custom/orderdetail.js?t=11172015")" type="text/javascript"></script>
    )

以下是脚本扩展方法:

public static MvcHtmlString Script(this HtmlHelper htmlHelper,Func<object,HelperResult> template)
    {
        htmlHelper.ViewContext.HttpContext.Items["_script_" + Guid.NewGuid()] = template;
        return MvcHtmlString.Empty;
    }

这对我们来说效果很好,我认为这是你想要做的.

  How To Set a NLS Session Parameter At Database Or Schema Level For All Connections?

How To Set a NLS Session Parameter At Database Or Schema Level For All Connections?

How To Set a NLS Session Parameter At Database Or Schema Level For All Connections? (Doc ID 251044.1)

https://support.oracle.com/epmos/faces/DocumentDisplay?_afrLoop=335038610424309&parent=DOCUMENT&sourceId=115001.1&id=251044.1&_afrWindowMode=0&_adf.ctrl-state=eqr5gy0az_53

APPLIES TO:
Oracle Database - Enterprise Edition - Version 8.0.3.0 to 11.2.0.3 [Release 8.0.3 to 11.2]
Oracle Database - Enterprise Edition - Version 11.2.0.4 to 11.2.0.4 [Release 11.2]
Information in this document applies to any platform.
PURPOSE
How to define some NLS session parameters for all clients, regardless of the used NLS_LANG (or other NLS parameter) setting on the client side

SCOPE
Anyone who want to control NLS settings from the server side.

DETAILS
Why to set a NLS session parameter at Database or Schema level for all connections?
The client side NLS setting will override the instance NLS settings like documented in Note 241047.1 The Priority of NLS Parameters Explained.

So you have no "server side" control on the used NLS session settings as they are derived from the client side.

However, if you like to overwrite some NLS session parameters for all clients, regardless of the used NLS_LANG (or other NLS parameter) setting on the client side then you can do that, for most environments, in the way described in this note.
Please note that:

* Oracle recommends you to define always the (correct) NLS_LANG.
The <characterset> part of the NLS_LANG is a (very important) client only parameter and cannot be set or defined from server side for a session.
Why this is so important is documented in Note 158577.1 and note 179133.1

* This is *not* working for some JDBC drivers , see Note 115001.1 NLS_LANG Client Settings and JDBC Drivers
And may also not work for other 3the party connection methods,if the connector issues from the driver itself alter sessions after the logon procedure of Oracle is done then they will override the trigger.

* When using a PL/SQL package procedure called by the logon trigger and this has any unhandled exceptions or raises any exceptions, then the logon trigger fails. When the logon trigger fails, the logon fails, that is, the user is denied permission to log in to the database

* We do NOT recommend to have several "after logon" triggers, for setting NLS parameters seen the execution order may differ. See Note 121196.1 Fire Sequence of Database Triggers
How to set a NLS session parameter at database level for all connections ?
Create an event trigger like this:
(Example for the NLS_TIMESTAMP_TZ_FORMAT parameter)

CREATE OR REPLACE TRIGGER sys.global_nls_session_settings AFTER LOGON ON DATABASE
BEGIN
execute immediate ''alter session set NLS_TIMESTAMP_TZ_FORMAT =''''DD/MM/YYYY HH24:MI:SS TZR TZD'''''';
END;
/
How to set a NLS session parameter at schema level for all connections ?
You can also create a logon trigger for one schema:
(Example for the NLS_DATE_FORMAT and NLS_NUMERIC_CHARACTERS parameter for the scott schema)
CREATE OR REPLACE TRIGGER sys.schema_nls_session_settings AFTER LOGON ON SCOTT.SCHEMA
BEGIN
execute immediate ''alter session set NLS_DATE_FORMAT=''''DD/MM/YYYY HH24:MI:SS'''''';
execute immediate ''alter session set NLS_NUMERIC_CHARACTERS=''''.,'''''';
END;
/
What NLS parameters can be set using logon triggers?
The parameters which can be set like this, are all the NLS parameters you can do an alter session for:

8i and up:

NLS_CALENDAR 
NLS_COMP 
NLS_CREDIT 
NLS_CURRENCY 
NLS_DATE_FORMAT 
NLS_DATE_LANGUAGE 
NLS_DEBIT 
NLS_ISO_CURRENCY 
NLS_LANGUAGE 
NLS_LIST_SEPARATOR 
NLS_MONETARY_CHARACTERS 
NLS_NUMERIC_CHARACTERS 
NLS_SORT 
NLS_TERRITORY 
NLS_DUAL_CURRENCY
NLS_TIMESTAMP_FORMAT
NLS_TIMESTAMP_TZ_FORMAT

new in 9i/10g:
NLS_LENGTH_SEMANTICS
NLS_NCHAR_CONV_EXCP
note: NLS_TIME_FORMAT and NLS_TIME_TZ_FORMAT are used internally only and should NOT be set or altered

Again, the client character set CANNOT be set or defined this way.
How to see if there are logon triggers?
This select gives you all defined after logon triggers:

conn / as sysdba
select OWNER, TRIGGER_NAME, TRIGGER_BODY from DBA_TRIGGERS where 
 trim(TRIGGERING_EVENT) = ''LOGON''
/
select OWNER, TRIGGER_NAME, TRIGGER_BODY from DBA_TRIGGERS where 
 upper(TRIGGER_NAME) = ''LOGON_PROC''
/

REFERENCES
NOTE:115001.1 - NLS_LANG Client Settings and JDBC Drivers
NOTE:241047.1 - The Priority of NLS Parameters Explained (Where To Define NLS Parameters)
	
 	
Was this document helpful?
 
 	 	 
 	
Document Details
 
Email link to this documentOpen document in new windowPrintable Page
	
Type:
Status:
Last Major Update:
Last Update:
BULLETIN
PUBLISHED
16-Jul-2015
06-Dec-2016

 	 	 

 	
Related Products
 
	
Oracle Database - Enterprise Edition
Oracle Database - Enterprise Edition
 	 	 
 	
Information Centers
 
			
Information Center: Overview Database Server/Client Installation and Upgrade/Migration [1351022.2]

Index of Oracle Database Information Centers [1568043.2]

インフォメーション・センター: データベースおよび Enterprise Manager 日本語ドキュメント [1946305.2]

Information Center: Overview of Database Security Products [1548952.2]

 	 	 
 	
Document References
 
 	 	 
 	
Recently Viewed
 
	How To Set a NLS Session Parameter At Database Or Schema Level For All Connections? [251044.1]	

	NLS_LANG Client Settings and JDBC Drivers [115001.1]	

	IF: High Requests on dc_rollback_segments [1951703.1]	

	WebLogic Server:使用XA Datasource发生 - 获取“XAER_NOTA:XID无效”异常 [2357599.1]	

	How to Validate Network and Name Resolution Setup for the Clusterware and RAC [1054902.1]	

Show More
 	 	 
Didn''t find what you are looking for?Ask in Community...

 
Related
 
 
Products
 
Oracle Database Products > Oracle Database Suite > Oracle Database > Oracle Database - Enterprise Edition > RDBMS
Oracle Database Products > Oracle Database Suite > Oracle Database > Oracle Database - Enterprise Edition > RDBMS > NLS Conversion issues, Characterset Conversion, Characterset issues (lossy and truncation data)

 

 

asp.net core razor自定义taghelper

asp.net core razor自定义taghelper

<p>又一个新的名词(taghelper),通过taghelper是可以操作html标签、条件输出、更是自由添加内外元素。当然也内置了挺多的asp-开头的taghelper。</p> <p>下面文章中也简单的带大家实现一个taghelper;</p> <blockquote> <p>创建自定义html元素</p> </blockquote> <p>创建一个类ButtonTagHelper</p> <p>tagName为标签名称,下面创建一个button标签</p> <pre><code>using Microsoft.AspNetCore.Razor.TagHelpers;

namespace Ctrl.Core.Tag.Controls.Button { [HtmlTargetElement("test-button")] public class ButtonTagHelper:TagHelper { public override void Process(TagHelperContext context, TagHelperOutput output) { output.TagName = "button"; base.Process(context, output); } } }

</code></pre>

<blockquote> <p>注册taghelper</p> </blockquote> <p>创建完后可没法执行使用哦,在.cshtml通过某个标签比如form标签输入asp-,下面立刻就出现了一个列表 asp-.... ,这些是怎么做到的呢?因为在_ViewImports在我们创建项目工程时,已经提前引入了taghelper默认引入的是微软已经为我们写好的taghelper类库Microsoft.AspNetCore.Mvc.TagHelpers;</p> <p>我们自定义的话也需要按照这个方式引入自定义的taghelper,下面我自己创建了一个类库名字为"Ctrl.Core.Tag",我这个类库下面要存放所有的taghelper 我直接引入命名空间</p> <pre><code>@addTagHelper *,Ctrl.Core.Tag </code></pre> <p>如果想引入特定的taghelper如下</p> <pre><code>@addTagHelper 你的TagHelper , 命名空间 </code></pre> <p>然后我们测试一下是否可用了,先生成一下项目,然后找个cshtml视图,输入刚才的前缀test会出来刚才定义的标签</p> <p>添加上并运行项目查看刚才创建的button标签是否存在</p> <blockquote> <p>添加自定义属性</p> </blockquote> <p>上面需求是满足不了我们日常需求的,下面我们再定义一个元素属性</p> <pre><code> output.Attributes.SetAttribute("class", "btn btn-primary"); </code></pre> <p>然后再打开页面看效果就会看到class元素已经给加上了.</p> <pre><code>using Microsoft.AspNetCore.Razor.TagHelpers;

namespace Ctrl.Core.Tag.Controls.Button { [HtmlTargetElement("test-button")] public class ButtonTagHelper:TagHelper { public override void Process(TagHelperContext context, TagHelperOutput output) { output.TagName = "button"; output.Attributes.SetAttribute("class", "btn btn-primary"); base.Process(context, output); } } }

</code></pre>

<blockquote> <p>通过vs感知匹配按钮类型</p> </blockquote> <p>上面能满足我们自定义标签了,但是可能使用起来有局限性,下面我给大家提供一个场景思路,后面大家可以自己进行扩展.</p> <p>我创建一个枚举类为 CtrlButtonType</p> <pre><code>namespace Ctrl.Core.Tag.Controls.Button { /// &lt;summary&gt; /// 按钮类型 /// &lt;/summary&gt; public enum CtrlButtonType { /// &lt;summary&gt; /// 默认样式 /// &lt;/summary&gt; Default, /// &lt;summary&gt; /// 首选项 /// &lt;/summary&gt; Primary, /// &lt;summary&gt; /// 成功 /// &lt;/summary&gt; Success, /// &lt;summary&gt; /// 一般信息 /// &lt;/summary&gt; Info, /// &lt;summary&gt; /// 警告 /// &lt;/summary&gt; Warning, /// &lt;summary&gt; /// 危险 /// &lt;/summary&gt; Danger } }

</code></pre>

<p>在buttonTagHelper类中增加一个属性</p> <pre><code>public CtrlButtonType ButtonType { get; set; } </code></pre> <p>到cshtml中添加刚才那个页面的属性,会发现有提示,以及可以看到刚才枚举中定义的.这样通过vs感知以及通过类型指定我们刚才按钮的类型是不是很方面了.</p> <pre><code data-language="usingMicrosoft.AspNetCore.Razor.TagHelpers;"> namespace Ctrl.Core.Tag.Controls.Button { [HtmlTargetElement("test-button")] public class ButtonTagHelper:TagHelper { public CtrlButtonType ButtonType { get; set; } public override void Process(TagHelperContext context, TagHelperOutput output) { output.TagName = "button"; output.Attributes.SetAttribute("class", "btn btn-"+ButtonType.ToString().ToLower()); base.Process(context, output); } } } </code></pre> <pre><code> &lt;test-button button-type="Success"&gt;&lt;/test-button&gt; </code></pre> ![](https://img2018.cnblogs.com/blog/1098068/201909/1098068-20190918124748157-166588812.gif)

原文出处:https://www.cnblogs.com/yyfh/p/11541067.html

asp.net core razor自定义taghelper的方法

asp.net core razor自定义taghelper的方法

又一个新的名词(taghelper),通过taghelper是可以操作html标签、条件输出、更是自由添加内外元素。当然也内置了挺多的asp-开头的taghelper。

下面文章中也简单的带大家实现一个taghelper;

创建自定义html元素

创建一个类ButtonTagHelper

tagName为标签名称,下面创建一个button标签

using Microsoft.AspNetCore.Razor.TagHelpers;
namespace Ctrl.Core.Tag.Controls.Button
{
  [HtmlTargetElement("test-button")]
  public class ButtonTagHelper:TagHelper
  {
    public override void Process(TagHelperContext context, TagHelperOutput output)
    {
      output.TagName = "button";
      base.Process(context, output);
    }
  }
}

注册taghelper

创建完后可没法执行使用哦,在.cshtml通过某个标签比如form标签输入asp-,下面立刻就出现了一个列表 asp-.... ,这些是怎么做到的呢?因为在_ViewImports在我们创建项目工程时,已经提前引入了taghelper默认引入的是微软已经为我们写好的taghelper类库Microsoft.AspNetCore.Mvc.TagHelpers;

我们自定义的话也需要按照这个方式引入自定义的taghelper,下面我自己创建了一个类库名字为"Ctrl.Core.Tag",我这个类库下面要存放所有的taghelper 我直接引入命名空间

@addTagHelper *,Ctrl.Core.Tag

如果想引入特定的taghelper如下

@addTagHelper 你的TagHelper , 命名空间

然后我们测试一下是否可用了,先生成一下项目,然后找个cshtml视图,输入刚才的前缀test会出来刚才定义的标签

添加上并运行项目查看刚才创建的button标签是否存在

添加自定义属性

上面需求是满足不了我们日常需求的,下面我们再定义一个元素属性

 output.Attributes.SetAttribute("class", "btn btn-primary");

然后再打开页面看效果就会看到class元素已经给加上了.

using Microsoft.AspNetCore.Razor.TagHelpers;
namespace Ctrl.Core.Tag.Controls.Button
{
  [HtmlTargetElement("test-button")]
  public class ButtonTagHelper:TagHelper
  {
    public override void Process(TagHelperContext context, TagHelperOutput output)
    {
      output.TagName = "button";
      output.Attributes.SetAttribute("class", "btn btn-primary");
      base.Process(context, output);
    }
  }
}

通过vs感知匹配按钮类型

上面能满足我们自定义标签了,但是可能使用起来有局限性,下面我给大家提供一个场景思路,后面大家可以自己进行扩展.

我创建一个枚举类为 CtrlButtonType

namespace Ctrl.Core.Tag.Controls.Button
{
  /// <summary>
  ///   按钮类型
  /// </summary>
  public enum CtrlButtonType
  {
    /// <summary>
    /// 默认样式
    /// </summary>
    Default,
    /// <summary>
    ///   首选项
    /// </summary>
    Primary,
    /// <summary>
    ///   成功
    /// </summary>
    Success,
    /// <summary>
    /// 一般信息
    /// </summary>
    Info,
    /// <summary>
    /// 警告
    /// </summary>
    Warning,
    /// <summary>
    /// 危险
    /// </summary>
    Danger
  }
}

在buttonTagHelper类中增加一个属性

public CtrlButtonType ButtonType { get; set; }

到cshtml中添加刚才那个页面的属性,会发现有提示,以及可以看到刚才枚举中定义的.这样通过vs感知以及通过类型指定我们刚才按钮的类型是不是很方面了.

namespace Ctrl.Core.Tag.Controls.Button
{
  [HtmlTargetElement("test-button")]
  public class ButtonTagHelper:TagHelper
  {
    public CtrlButtonType ButtonType { get; set; }
    public override void Process(TagHelperContext context, TagHelperOutput output)
    {
      output.TagName = "button";
      output.Attributes.SetAttribute("class", "btn btn-"+ButtonType.ToString().ToLower());
      base.Process(context, output);
    }
  }
}
<test-button button-type="Success"></test-button>

总结

以上所述是小编给大家介绍的asp.net core razor自定义taghelper,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

您可能感兴趣的文章:
  • asp.net core标签助手的高级用法TagHelper+Form
  • asp.net core新特性之TagHelper标签助手
  • Razor TagHelper实现Markdown转HTML的方法
  • Visual Studio 2017下ASP.NET CORE的TagHelper智能提示解决办法
  • NET Core TagHelper实现分页标签
  • 解读ASP.NET 5 & MVC6系列教程(13):TagHelper
  • ASP.NET Core MVC中的标签助手(TagHelper)用法

Asp.Net Core 学习教程2、使用ASP.NET Core中的RazorPages

Asp.Net Core 学习教程2、使用ASP.NET Core中的RazorPages

1、创建一个Asp.Net Core Web应用程序

1.1、打开VS2019 新建项目

1.2、选好项目位置后进入选择界面,选择Web应用程序

 

1.3、进去的页面结构如下

 

 

 Pages 文件夹:包含 Razor 页面和支持文件。 每个 Razor 页面都是一对文件:

  • 一个 .cshtml 文件,其中包含使用 Razor 语法的 C# 代码的 HTML 标记 。
  • 一个 .cshtml.cs 文件,其中包含处理页面事件的 C# 代码 。

 

wwwroot 文件夹包含静态文件,如 HTML 文件、JavaScript 文件和 CSS 文件。

appSettings.json包含配置数据,如连接字符串。

Program.cs包含程序的入口点。 

Startup.cs包含配置应用行为的代码。

运行起来如果提示要安装证书的直接点是就可以了,出现WelCome就表示可以了

2、添加模型

2.1、在这里搭建“商品”模型的基架。 确切地说,基架工具将生成页面,用于对“商品”模型执行创建、读取、更新和删除 (CRUD) 操作。

右击项目名称添加文件夹Models,在Models新文件夹里新建一个模型类Shop

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Threading.Tasks;

namespace CoreRazorPages.Models
{
    /// <summary>
    /// 商品类
    /// </summary>
    public class Shop
    {
        
        [Display(Name="ID")]
        public int ID { get; set; }
        [Display(Name = "Guid")]
        public string Guid { get; set; }
        [Display(Name = "名称")]
        public string Name { get; set; }
        [Display(Name = "价格")]
        public decimal Price { get; set; }
        [Display(Name = "添加日期")]
        [DataType(DataType.Date)]
        public DateTime AddTime { get; set; }
    }
}

3、添加基架

3.1、右击Pages文件夹添加一个文件夹Shop,然后右击Shop>添加>新搭建基架的项目>使用实体框架生成Razor页面(CRUD)模型类选择Shop,数据库上下文点击右边的+号

3.2、生成项目,如果报错Shop就加上命名空间,这里是因为文件夹Shop名称跟类名Shop一样

项目文件夹多了个Data那是数据库上下文,还有配置文件里面也加了数据库访问的字符串在appsetting.json文件夹里

   3.3、更改数据库链接

打开appsettiong.json文件修改里面的数据库链接字符串,然后点工具>nuget包管理器>程序包管理控制台依次输入Add-Migration InitialCreate、Update-Database,警告不要管他(程序员不怕警告就怕错误 哈哈)

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  },
  "AllowedHosts": "*",
    "ConnectionStrings": {
        //原来生成的Server=(localdb)\\mssqllocaldb;Database=CoreRazorPagesContext-10c906a7-1959-4967-9659-0fcbfe8b7d16;Trusted_Connection=True;MultipleActiveResultSets=true
        "CoreRazorPagesContext": "Data Source=服务器地址;Initial Catalog=数据库名User ID=用户名;Password=密码"
    }
}

 

 

看生成的数据库

 

3.4、修改文件夹Shared下的布局_Layout.cchtml添加Shop导航

看起来有点像winform的服务器控件一样哈哈,asp-area是区域名,现在没有 asp-page是指Razor的位置这里是Shop/Index

<header>
        <nav class="navbar navbar-expand-sm navbar-toggleable-sm navbar-light bg-white border-bottom box-shadow mb-3">
            <div class="container">
                <a class="navbar-brand" asp-area="" asp-page="/Index">CoreRazorPages</a>
                <button class="navbar-toggler" type="button" data-toggle="collapse" data-target=".navbar-collapse" aria-controls="navbarSupportedContent"
                        aria-expanded="false" aria-label="Toggle navigation">
                    <span class="navbar-toggler-icon"></span>
                </button>
                <div class="navbar-collapse collapse d-sm-inline-flex flex-sm-row-reverse">
                    <ul class="navbar-nav flex-grow-1">
                        <li class="nav-item">
                            <a class="nav-link text-dark" asp-area="" asp-page="/Index">Home</a>
                        </li>
                        <li>
                            <aasp-area="" asp-page="Shop/Index">商品</a>
                        </li>
                        <li class="nav-item">
                            <a class="nav-link text-dark" asp-area="" asp-page="/Privacy">Privacy</a>
                        </li>
                    </ul>
                </div>
            </div>
        </nav>
    </header>

  3.5、添加一些数据在Shop中,在Data文件件下面添加一个类 AddDefaultData,然后修改程序入口main 方法。

从依赖关系注入容器获取数据库上下文实例>调用 InitData方法,并将上下文传递给它、方法完成时释放上下文

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

//添加命名空间
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using CoreRazorPages.Models;
namespace CoreRazorPages.Data
{
    public class AddDefaultData
    {
        /// <summary>
        /// 添加数据
        /// </summary>
        /// <param name="serviceProvider"></param>
        public static void InitData(IServiceProvider serviceProvider)
        {
            using (var db = new CoreRazorPagesContext(serviceProvider.GetRequiredService<DbContextOptions<CoreRazorPagesContext>>()))
            {
                //如果有数据就不添加了
                if (db.Shop.Any())
                {
                    return;
                }
                //添加10条初始数据
                for(var i=0;i<10;i++)
                {
                    var model = new Shop
                    {
                        Name = "商品"+i.ToString(),
                        Guid = Guid.NewGuid().ToString("N"),
                        Price = i + 0.66M,
                        AddTime = DateTime.Now
                    };
                    db.Shop.AddRange(model);
                }
                db.SaveChanges();
            }
        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
//添加命名空间
using Microsoft.Extensions.DependencyInjection;
using CoreRazorPages.Data;

namespace CoreRazorPages
{
    public class Program
    {
        public static void Main(string[] args)
        {
            var host = CreateHostBuilder(args).Build();
            using (var scope=host.Services.CreateScope())
            {
                var services = scope.ServiceProvider;
                try
                {
                    AddDefaultData.InitData(services);
                }
                catch (Exception ex)
                {
                    var logger = services.GetRequiredService<ILogger<Program>>();
                    logger.LogError(ex, "添加初始数据失败");
                }

            }
                host.Run();
        }

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                });
    }
}

  数据库依赖注入在staup.cs里面已经自己生成好了

public void ConfigureServices(IServiceCollection services)
        {
            services.AddRazorPages();
            //数据库连接
            services.AddDbContext<CoreRazorPagesContext>(options =>
                    options.UseSqlServer(Configuration.GetConnectionString("CoreRazorPagesContext")));
        }

 然后启动 点到商品导航上面数据就有了,也可以一些基本的操作(CRUD)

4、添加搜索

添加名称,guid的搜索,在Pages文件夹下面的Shop文件夹下面的Index.cchtml.sc打开 修改

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.EntityFrameworkCore;
using CoreRazorPages.Data;
using CoreRazorPages.Models;

namespace CoreRazorPages.Pages.Shop
{
    public class IndexModel : PageModel
    {
        private readonly CoreRazorPages.Data.CoreRazorPagesContext _context;

        public IndexModel(CoreRazorPages.Data.CoreRazorPagesContext context)
        {
            _context = context;
        }
        /// <summary>
        /// 模型List
        /// </summary>
        public IList<CoreRazorPages.Models.Shop> Shop { get;set; }
        [BindProperty(SupportsGet = true)]
        public string SearchName { get; set; }
        [BindProperty(SupportsGet = true)]
        public string SearchGuid { get; set; }
        public async Task OnGetAsync()
        {
            var model = _context.Shop.Where(x=>x.ID>0);
            if (!string.IsNullOrEmpty(SearchName))
                model = model.Where(x => x.Name.Contains(SearchName));
            if (!string.IsNullOrEmpty(SearchGuid))
                model = model.Where(x => x.Guid.Contains(SearchGuid));
            Shop = await model.ToListAsync();
        }
    }
}

 在Index.cshtml里面添加

<p>
    <a asp-page="Create">Create New</a>
</p>
<form>
    <p>
        名字: <input type="text" asp-for="SearchName" />
        Guid: <input type="text" asp-for="SearchGuid" />
        <input type="submit" value="搜索" />
    </p>
</form>

 SearchName 、SearchGuid:包含用户在搜索文本框中输入的文本。 SearchString 也有 [BindProperty] 属性。 [BindProperty] 会绑定名称与属性相同的表单值和查询字符串。 在 GET 请求中进行绑定需要 (SupportsGet = true)

5、添加字段,验证

5.1在模型文件Shop.cs添加一个字段Remark

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Threading.Tasks;

namespace CoreRazorPages.Models
{
    /// <summary>
    /// 商品类
    /// </summary>
    public class Shop
    {
        
        [Display(Name="ID")]
        public int ID { get; set; }
        [Display(Name = "Guid")]
        public string Guid { get; set; }
        [Display(Name = "名称")]
        public string Name { get; set; }
        [Display(Name = "价格")]
        public decimal Price { get; set; }
        [Display(Name = "添加日期")]
        [DataType(DataType.Date)]
        public DateTime AddTime { get; set; }
        /// <summary>
        /// 新加字段、验证
        /// </summary>
        [Required]//必填
        [StringLength(10,ErrorMessage ="{0}最大长度10  必填")]//最大长度
        [RegularExpression(@"^[A-Z]+[a-zA-Z""''\s-]*$")]//验证格式
        public string Ramake { get; set; }
    }
}

 

 5.2nuget包管理器>程序包管理控制台依次输入Add-Migration Remake、Update-Database,

 

 

 

 

 5.3、编辑Shop文件夹下面的Index.cshtml、Create.cshtml、Delete.cshtml、Details.cshtml、Edit.cshtml文件添加Remake字段

<td>
                @Html.DisplayFor(modelItem => item.Ramake)
            </td>



 <div class="form-group">
                <label asp-for="Shop.Ramake" class="control-label"></label>
                <input asp-for="Shop.Ramake" class="form-control" />
                <span asp-validation-for="Shop.Ramake" class="text-danger"></span>
            </div>




 <dd class="col-sm-10">
            @Html.DisplayFor(model => model.Shop.Ramake)
        </dd>




<div class="form-group">
                <label asp-for="Shop.Ramake" class="control-label"></label>
                <input asp-for="Shop.Ramake" class="form-control" />
                <span asp-validation-for="Shop.Ramake" class="text-danger"></span>
            </div>

 

5.4、运行起来测试看

6、代码总结:

  • Razor 页面派生自 PageModel。 按照约定,PageModel 派生的类称为 <PageName>Model。 此构造函数使用依赖关系注入将 RazorPagesMovieContext 添加到页。 所有已搭建基架的页面都遵循此模式,对页面发出请求时,OnGetAsync 方法向 Razor 页面返回影片列表。 调用 OnGetAsync 或 OnGet 以初始化页面的状态。 在这种情况下,OnGetAsync 将获得影片列表并显示出来。

    当 OnGet 返回 void 或 OnGetAsync 返回 Task 时,不使用任何返回语句。 当返回类型是 IActionResult 或 Task<IActionResult> 时,必须提供返回语句

  • @page 指令:@page Razor 指令将文件转换为一个 MVC 操作,这意味着它可以处理请求。 @page 必须是页面上的第一个 Razor 指令。 @page 是转换到 Razor 特定标记的一个示例

  • @model 指令指定传递给 Razor 页面的模型类型。 在前面的示例中,@model 行使 PageModel 派生的类可用于 Razor 页面。 在页面上的 @Html.DisplayNameFor 和 @Html.DisplayFor HTML 帮助程序中使用该模型。

现在开始对Razor页面有一定了解,大多数代码都是系统自己生成的,数据库上下文类、依赖注入、我也是对Core还不怎么熟悉不知道怎么学习跟着做就行了,对后面肯定有很大的帮助。

原文地址:https://www.cnblogs.com/w5942066/p/12597712.html

 

关于asp.net – 相当于Sitecore中的Razor Section Helperasp.net core razor pages的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于 How To Set a NLS Session Parameter At Database Or Schema Level For All Connections?、asp.net core razor自定义taghelper、asp.net core razor自定义taghelper的方法、Asp.Net Core 学习教程2、使用ASP.NET Core中的RazorPages等相关知识的信息别忘了在本站进行查找喔。

本文标签: