我想将输入标记助手与剃刀代码组合起来设置属性,但我不能让这两种技术一起工作.我只是试图根据视图模型属性的值在输入字段上设置disabled属性.
当我把剃刀代码放在asp-for标签后面时,剃刀智能感知器无法被识别,并且该字段未按预期禁用...
<input asp-for="OtherDrugs" @((Model.OtherDrugs == null) ? "disabled" : "") class="form-control" />
Run Code Online (Sandbox Code Playgroud)
渲染输出......
<input type="text" id="OtherDrugs" name="OtherDrugs" value="" />
Run Code Online (Sandbox Code Playgroud)
当我将剃刀代码放在asp-for标签之前时,无法识别标签帮助程序intellisense,并且未按预期使用视图模型属性设置该字段...
<input @((Model.OtherDrugs == null) ? "disabled" : "") asp-for="OtherDrug" class="form-control" />
Run Code Online (Sandbox Code Playgroud)
渲染输出......
<input disabled asp-for="OtherDrugs" class="form-control" />
Run Code Online (Sandbox Code Playgroud)
请注意,如果剃刀代码位于类属性中,则组合标记助手和剃刀会起作用.遗憾的是,输入字段需要disabled属性,而不是bootstrap 3的禁用类.
有没有办法让这项工作?
我已经安装了VS2017 15.3.0 Preview 4和.NET Core 2.0 Preview 2,并创建了一个默认的Web MVC应用程序.我有兴趣了解新的日志记录功能如何工作但我无法让VS在查看Debug输出窗口时使用appsettings.Development.json中定义的日志记录值.
我的理解是appsettings.Development.json文件优先于appsettings.json,但只有后一个文件中的值对调试窗口有任何影响.这是正确的吗?如果有,是否需要额外的设置?
以下是价值和结果......
appsettings.json
{
"Logging": {
"IncludeScopes": false,
"Debug": {
"LogLevel": {
"Default": "None"
}
},
"Console": {
"LogLevel": {
"Default": "Information"
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
appsettings.Development.json
{
"Logging": {
"IncludeScopes": false,
"LogLevel": {
"Default": "Information",
"System": "Information",
"Microsoft": "Information"
}
}
}
Run Code Online (Sandbox Code Playgroud)
调试时清空输出(请注意仅显示Application Insights遥测记录,我还没有找到如何摆脱它)
但是,如果我更改appsettings.json中的日志级别,那么我会看到输出符合预期...
appsettings.json
{
"Logging": {
"IncludeScopes": false,
"Debug": {
"LogLevel": {
"Default": "Information"
}
},
"Console": {
"LogLevel": {
"Default": "Information"
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
调试时的新输出(请注意,Microsoft.AspNetCore.Hosting.Internal.WebHost:现在包含信息) …
我的视图模型具有可以为空的日期属性,例如...
[DataType(DataType.Date)]
public DateTime? SanctionExpires { get; set; }
Run Code Online (Sandbox Code Playgroud)
但是当我尝试使用null-coalescing运算符时......
var test = model.SanctionExpires.Value.ToUniversalTime() ?? model.SanctionExpires;
Run Code Online (Sandbox Code Playgroud)
我收到以下错误...
算'''' 不能应用于'datetime'和'datetime'类型的操作数
我认为这应该工作,因为我将我的日期属性设置为可空,这篇文章表明它应该也可以工作.我究竟做错了什么?
UPDATE
为了更清晰,我想使用null-coaslescing来分配一个Dapper参数,该参数将更新数据库中的DateTime字段.该字段可以接受空值或日期时间值.基本上,如果用户指定日期,则将提供的日期分配给参数,否则指定null ...
p.Add("@SanctionExpires", model.SanctionExpires.Value.ToUniversalTime() ?? model.SanctionExpires);
Run Code Online (Sandbox Code Playgroud)
请注意,我必须进行UTC转换,因为我使用的是使用UTC作为日期的SQL Azure,否则如果我只是从本地系统传递数据,那么我的时间将超过11小时(我在澳大利亚).在sql中我使用函数在更新表之前将日期偏移到我的时区.
我目前的解决方案是让它工作,但不确定这是否是最干净的方式.能够排成一列真是太好了......
if (model.SanctionExpires == null)
p.Add("@SanctionExpires", model.SanctionExpires);
else
p.Add("@SanctionExpires", model.SanctionExpires.Value.ToUniversalTime());
Run Code Online (Sandbox Code Playgroud) 我试图从 Asp.Net Core 中的视图组件返回 HTTP 500 或 BadRequest() 结果,但是此返回类型似乎不适用于视图组件。状态代码返回类型是否可用于视图组件,或者我的设计是否错误?
\n\n我正在通过 ajax 调用我的控制器操作,如下所示......
\n\n<a asp-controller="Client" asp-action="LoadVisit" asp-route-id="@item.VisitID" data-ajax="true" data-ajax-method="GET" data-ajax-update="#ClientVisit" data-ajax-mode="replace" data-ajax-failure="AjaxOnFailure(xhr,\xc2\xa0status,\xc2\xa0error)" role="button"><i class="fa fa-folder-open-o"></i></a>\nRun Code Online (Sandbox Code Playgroud)\n\n我的控制器操作正在调用/返回我的视图组件,如下所示......
\n\npublic IActionResult LoadVisit(int? id)\n{\n\n if (id == null || id == 0)\n {\n return NotFound();\n }\n\n return ViewComponent("ClientVisit", new { visitID = id.GetValueOrDefault() });\n\n}\nRun Code Online (Sandbox Code Playgroud)\n\n我的 ClientVisit 视图组件具有以下内容...
\n\npublic async Task<IViewComponentResult> InvokeAsync(int? clientID, int? visitID)\n{\n\n try\n {\n var model = new VisitViewModel();\n model = await visitAPI.GetVisit(clientID, visitID);\n return View(model);\n }\n …Run Code Online (Sandbox Code Playgroud) 从我的客户端详细信息页面,我有一个按钮来编辑重定向到编辑页面的客户端记录.我在编辑页面上有一个"返回客户端详细信息"链接,我想将用户重定向回以前的客户端详细信息页面.
<a asp-controller="Client" asp-action="Detail" asp-route-id="@Model.ClientID">Return to client detail</a>
Run Code Online (Sandbox Code Playgroud)
目前,这可以按预期工作,但从头开始重新加载详细信息页面(即再次运行所有各种数据库查询)需要额外的时间.由于用户实际上只是在不更改客户端状态的情况下取消编辑,因此我希望将用户返回到上一个详细信息页面,而无需再次执行控制器操作.
基本上我想模拟浏览器后退按钮(以提高响应能力),但我不知道如何实现这个或者是否这样做是好的做法.一些指导意见将不胜感激.
谢谢
在ASP.Net Core中,是否可以在视图模型中自动转换驼峰案例属性名称,以便在使用标签助手时在相应的标签中插入空格?
如果我的视图模型看起来像这样...
[Display(Name = "First Name")]
public string FirstName { get; set; }
[Display(Name = "Last Name")]
public string LastName { get; set; }
[Display(Name = "Referral Date")]
public DateTime ReferralDate { get; set; }
Run Code Online (Sandbox Code Playgroud)
似乎很多额外的配置都应用了数据注释,例如
[显示(名称=“名字”)]
在单词之间简单地插入一个空格。最好使用Tag Helpers默认插入空格,以避免这种手动配置和可能的错别字。
如果不能,自定义标签助手可以在这种情况下提供帮助,如果可以,它将如何工作?
asp.net-mvc razor tag-helpers asp.net-core asp.net-core-tag-helpers
我已经使用个人用户帐户创建了默认的 ASP Net Core MVC Web 应用程序。我向 AspNetUsers 表添加了一个自定义 UserID INT 字段,并将其作为外键链接到所有其他自定义表,以便我可以跟踪用户在数据库中插入/更新的记录。我这样做是因为我更喜欢使用 INT 字段作为主键。在这种情况下,一切正常。
我现在正在考虑使用外部身份提供程序,例如 Azure Active Directory,但是我无法弄清楚如何将 Azure AD(或任何其他身份提供程序)中的用户链接到我的本地数据库表以维护用户 ID 外键约束。从我所有的研究中,我找不到任何关于这种情况的文章。
如何将外部身份提供商的用户信息链接到我的本地数据库表?我担心我可能需要在外部身份提供程序和本地 AspNet 用户表中双重处理用户帐户管理,以使用其他自定义表维护外键,这看起来很疯狂。
也许我遗漏了一些明显的东西,或者我的方法都是错误的,所以如果有更好的替代方案来跟踪谁在使用外部身份提供程序的 ASP Net Core Web 应用程序的数据库表中做了什么,我会很乐意采用它。
authentication azure-active-directory asp.net-core-mvc asp.net-core-identity