在ASP.NET Core RC 1中,我使用以下代码检索上下文的值(页面的完整地址).然后我在配置中记录了这个值.
public class Startup
{
public IConfigurationRoot Configuration { get; set; }
private IHostingEnvironment CurrentEnvironment { get; set; }
private IHttpContextAccessor HttpContextAccessor { get; set; }
public Startup(IHostingEnvironment env,
IHttpContextAccessor httpContextAccessor)
{
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true);
if (env.IsDevelopment())
{
builder.AddUserSecrets();
}
builder.AddEnvironmentVariables();
Configuration = builder.Build();
CurrentEnvironment = env;
HttpContextAccessor = httpContextAccessor;
}
public void ConfigureServices(IServiceCollection services)
{
...
services.AddOptions();
services.Configure<WebAppSettings>(configuration);
services.Configure<WebAppSettings>(settings =>
{
...
settings.WebRootPath = CurrentEnvironment.WebRootPath; …Run Code Online (Sandbox Code Playgroud) 我在 ASP.NET MVC 6 中使用新的 Helper 标签。
<form asp-area="DAS"
asp-controller="Report"
asp-action="Add"
asp-route-id="@Model.id"
asp-route-incBalance="@Model.incBalance"
asp-route-dateSet="@Model.dataStart.ToString("yyyy-MM-dd")"
asp-route-dateNext="@Model.dataEnd.ToString("yyyy-MM-dd")"
method="post" role="form">
</form>
Run Code Online (Sandbox Code Playgroud)
我想路由属性:
asp-route-dateNext="@Model.dataEnd.ToString("yyyy-MM-dd")"
Run Code Online (Sandbox Code Playgroud)
仅适用于:
{
if (Model.incBalance == 0)
{
asp-route-dateNext="@Model.dataEnd.ToString("yyyy-MM-dd")"
}
}
Run Code Online (Sandbox Code Playgroud)
结果,我想得到这样的东西:
<form asp-area="DAS"
asp-controller="Report"
asp-action="Add"
asp-route-id="@Model.id"
asp-route-incBalance="@Model.incBalance"
asp-route-dateSet="@Model.dataStart.ToString("yyyy-MM-dd")"
{
if (Model.incBalance == 0)
{
asp-route-dateNext="@Model.dataEnd.ToString("yyyy-MM-dd")"
}
}
method="post" role="form">
</form>
Run Code Online (Sandbox Code Playgroud)
我收到这些错误:
TagHelper 属性必须格式良好。
Run Code Online (Sandbox Code Playgroud)if (Model.incBalance == 0)
和
标签助手“表单”在元素的属性声明区域中不得包含 C#。
Run Code Online (Sandbox Code Playgroud)asp-route-dateNext="@Model.dataEnd.ToString("yyyy-MM-dd")"
我正在使用 Visual Studio 2015 更新 1
更新 1: 我也试过这个选项:
@(Model.incBalance == 0 ? "asp-route-dateNext=" + Model.dataEnd.ToString("yyyy-MM-dd") : string.Empty)
Run Code Online (Sandbox Code Playgroud)
但错误仍然存在: …
c# asp.net-core-mvc tag-helpers asp.net-core asp.net-core-1.0
我有一个删除对象的方法.删除不属于视图,并且是"EditReport"中的"删除"按钮.成功删除"报告"上的重定向后.
[HttpPost]
[Route("{reportId:int}")]
[ValidateAntiForgeryToken]
public IActionResult DeleteReport(int reportId)
{
var success = _reportService.DeleteReportControl(reportId);
if (success == false)
{
ModelState.AddModelError("Error", "Messages");
return RedirectToAction("EditReport");
}
ModelState.AddModelError("OK", "Messages");
return RedirectToAction("Report");
}
Run Code Online (Sandbox Code Playgroud)
在ASP.NET MVC 5中,我使用以下属性在方法之间保存ModelState.我从这里开始:https://stackoverflow.com/a/12024227/3878213
public class SetTempDataModelStateAttribute : ActionFilterAttribute
{
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
base.OnActionExecuted(filterContext);
filterContext.Controller.TempData["ModelState"] =
filterContext.Controller.ViewData.ModelState;
}
}
public class RestoreModelStateFromTempDataAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
base.OnActionExecuting(filterContext);
if (filterContext.Controller.TempData.ContainsKey("ModelState"))
{
filterContext.Controller.ViewData.ModelState.Merge(
(ModelStateDictionary)filterContext.Controller.TempData["ModelState"]);
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是在ASP.NET MVC 6 RC 1(ASP.NET Core 1.0)中,此代码不起作用. …
c# asp.net-mvc asp.net-core-mvc asp.net-core asp.net-core-1.0
我添加以下路由属性:
[HttpGet]
[Route("add")]
[Route(@"{id:int}/{inn:regex(^[0-9]+$)}/incBalance:range(0,1)/{dateSet:datetime}/{dateNext:datetime}")]
public IActionResult Add(int id, string inn, int incBalance, DateTime dateSet, DateTime dateNext)
{
....
}
Run Code Online (Sandbox Code Playgroud)
在执行时出现错误:
An unhandled exception occurred while processing the request.
InvalidOperationException: The following errors occurred with attribute routing information:
Error 1:
For action: 'WebProject.Areas.DAS.Controllers.ReportController.Add'
Error: While processing template 'das/report/[action]/{id:int}/{inn:regex(^[0-9]+$)}/incBalance:range(0,1)/{dateSet:datetime}/{dateNext:datetime}', a replacement value for the token '0-9' could not be found. Available tokens: 'action, area, controller'.
Run Code Online (Sandbox Code Playgroud)
我删除regex(^[0-9]+$),一切正常