Skip to content

Commit

Permalink
updates for razor pages crud and blazor crud templates (#3086)
Browse files Browse the repository at this point in the history
* updates for razor pages crud and blazor crud templates

* PR fixes
  • Loading branch information
deepchoudhery committed Dec 5, 2024
1 parent b64caac commit 38a202b
Show file tree
Hide file tree
Showing 16 changed files with 2,316 additions and 24 deletions.
15 changes: 15 additions & 0 deletions eng/Versions.DotNetScaffold.props
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<VersionPrefix>9.0.0</VersionPrefix>
<PreReleaseVersionLabel>preview</PreReleaseVersionLabel>
<PreReleaseVersionIteration>10</PreReleaseVersionIteration>
<IncludeSourceRevisionInInformationalVersion>False</IncludeSourceRevisionInInformationalVersion>
<IsServicingBuild Condition="'$(PreReleaseVersionLabel)' == 'servicing'">true</IsServicingBuild>
<!--
When StabilizePackageVersion is set to 'true', this branch will produce stable outputs for 'Shipping' packages
-->
<StabilizePackageVersion Condition="'$(StabilizePackageVersion)' == ''">false</StabilizePackageVersion>
<DotNetFinalVersionKind Condition="'$(StabilizePackageVersion)' == 'true'">release</DotNetFinalVersionKind>
</PropertyGroup>
</Project>
25 changes: 25 additions & 0 deletions scripts/install-scaffold-all.cmd
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
set VERSION=10.0.0-dev
set DEFAULT_NUPKG_PATH=%userprofile%/.nuget/packages
set SRC_DIR=%cd%
set NUPKG=artifacts/packages/Debug/Shipping/
call taskkill /f /im dotnet.exe
call rd /Q /S artifacts
call dotnet pack src\dotnet-scaffolding\dotnet-scaffold\dotnet-scaffold.csproj -c Debug
call dotnet pack src\dotnet-scaffolding\dotnet-scaffold-aspire\dotnet-scaffold-aspire.csproj -c Debug
call dotnet pack src\dotnet-scaffolding\dotnet-scaffold-aspnet\dotnet-scaffold-aspnet.csproj -c Debug
call dotnet tool uninstall -g Microsoft.dotnet-scaffold
call dotnet tool uninstall -g Microsoft.dotnet-scaffold-aspire
call dotnet tool uninstall -g Microsoft.dotnet-scaffold-aspnet

call cd %DEFAULT_NUPKG_PATH%
call rd /Q /S Microsoft.dotnet-scaffold
call rd /Q /S Microsoft.dotnet-scaffold-aspire
call rd /Q /S Microsoft.dotnet-scaffold-aspnet
call rd /Q /S Microsoft.DotNet.Scaffolding.Internal
call rd /Q /S Microsoft.DotNet.Scaffolding.Core

call cd %SRC_DIR%/%NUPKG%
call dotnet tool install -g Microsoft.dotnet-scaffold --add-source %SRC_DIR%\%NUPKG% --version %VERSION%
call dotnet tool install -g Microsoft.dotnet-scaffold-aspire --add-source %SRC_DIR%\%NUPKG% --version %VERSION%
call dotnet tool install -g Microsoft.dotnet-scaffold-aspnet --add-source %SRC_DIR%\%NUPKG% --version %VERSION%
call cd %SRC_DIR%
10 changes: 7 additions & 3 deletions src/Scaffolding/VS.Web.CG.Mvc/Templates/Blazor/Create.cs
Original file line number Diff line number Diff line change
Expand Up @@ -68,9 +68,13 @@ public virtual string TransformText()
string propertyShortTypeName = property.ShortTypeName.Replace("?", string.Empty);
var inputTypeName = Model.GetInputType(propertyShortTypeName);
var inputClass = Model.GetInputClassType(propertyShortTypeName);
var requiredAttributeHtml = property.IsRequired ? "aria-required=\"true\"" : string.Empty;
var ariaRequiredAttributeHtml = property.IsRequired ? "aria-required=\"true\"" : string.Empty;
var divWhitespace = new string(' ', 16);
var requiredSpanAttributeHtml = property.IsRequired ? $"\r\n{divWhitespace}<span class=\"text-danger\">*</span>" : string.Empty;

this.Write("<div class=\"mb-3\">\r\n <label for=\"");
this.Write("<div class=\"mb-3\">");
this.Write(this.ToStringHelper.ToStringWithCulture(requiredSpanAttributeHtml));
this.Write("\r\n <label for=\"");
this.Write(this.ToStringHelper.ToStringWithCulture(modelPropertyNameLowercase));
this.Write("\" class=\"form-label\">");
this.Write(this.ToStringHelper.ToStringWithCulture(modelPropertyName));
Expand All @@ -85,7 +89,7 @@ public virtual string TransformText()
this.Write("\" class=\"");
this.Write(this.ToStringHelper.ToStringWithCulture(inputClass));
this.Write("\" ");
this.Write(this.ToStringHelper.ToStringWithCulture(requiredAttributeHtml));
this.Write(this.ToStringHelper.ToStringWithCulture(ariaRequiredAttributeHtml));
this.Write("/> \r\n <ValidationMessage For=\"() => ");
this.Write(this.ToStringHelper.ToStringWithCulture(modelName));
this.Write(".");
Expand Down
8 changes: 5 additions & 3 deletions src/Scaffolding/VS.Web.CG.Mvc/Templates/Blazor/Create.tt
Original file line number Diff line number Diff line change
Expand Up @@ -44,11 +44,13 @@
string propertyShortTypeName = property.ShortTypeName.Replace("?", string.Empty);
var inputTypeName = Model.GetInputType(propertyShortTypeName);
var inputClass = Model.GetInputClassType(propertyShortTypeName);
var requiredAttributeHtml = property.IsRequired ? "aria-required=\"true\"" : string.Empty;
var ariaRequiredAttributeHtml = property.IsRequired ? "aria-required=\"true\"" : string.Empty;
var divWhitespace = new string(' ', 16);
var requiredSpanAttributeHtml = property.IsRequired ? $"\r\n{divWhitespace}<span class=\"text-danger\">*</span>" : string.Empty;
#>
<div class="mb-3">
<div class="mb-3"><#= requiredSpanAttributeHtml #>
<label for="<#= modelPropertyNameLowercase #>" class="form-label"><#= modelPropertyName #>:</label>
<<#= inputTypeName #> id="<#= modelPropertyNameLowercase #>" @bind-Value="<#= modelName #>.<#= modelPropertyName #>" class="<#= inputClass #>" <#= requiredAttributeHtml #>/>
<<#= inputTypeName #> id="<#= modelPropertyNameLowercase #>" @bind-Value="<#= modelName #>.<#= modelPropertyName #>" class="<#= inputClass #>" <#= ariaRequiredAttributeHtml #>/>
<ValidationMessage For="() => <#= modelName #>.<#= modelPropertyName #>" class="text-danger" />
</div>
<# } #>
Expand Down
10 changes: 7 additions & 3 deletions src/Scaffolding/VS.Web.CG.Mvc/Templates/Blazor/Edit.cs
Original file line number Diff line number Diff line change
Expand Up @@ -83,9 +83,13 @@ public virtual string TransformText()
string propertyShortTypeName = property.ShortTypeName.Replace("?", string.Empty);
var inputTypeName = Model.GetInputType(propertyShortTypeName);
var inputClass = Model.GetInputClassType(propertyShortTypeName);
var requiredHtml = property.IsRequired ? "aria-required=\"true\"" : string.Empty;
var ariaRequiredAttributeHtml = property.IsRequired ? "aria-required=\"true\"" : string.Empty;
var divWhitespace = new string(' ', 16);
var requiredSpanAttributeHtml = property.IsRequired ? $"\r\n{divWhitespace}<span class=\"text-danger\">*</span>" : string.Empty;

this.Write(" <div class=\"mb-3\">\r\n <label for=\"");
this.Write(" <div class=\"mb-3\">");
this.Write(this.ToStringHelper.ToStringWithCulture(requiredSpanAttributeHtml));
this.Write("\r\n <label for=\"");
this.Write(this.ToStringHelper.ToStringWithCulture(modelPropertyNameLowercase));
this.Write("\" class=\"form-label\">");
this.Write(this.ToStringHelper.ToStringWithCulture(modelPropertyName));
Expand All @@ -100,7 +104,7 @@ public virtual string TransformText()
this.Write("\" class=\"");
this.Write(this.ToStringHelper.ToStringWithCulture(inputClass));
this.Write("\" ");
this.Write(this.ToStringHelper.ToStringWithCulture(requiredHtml));
this.Write(this.ToStringHelper.ToStringWithCulture(ariaRequiredAttributeHtml));
this.Write("/>\r\n <ValidationMessage For=\"() => ");
this.Write(this.ToStringHelper.ToStringWithCulture(modelName));
this.Write(".");
Expand Down
8 changes: 5 additions & 3 deletions src/Scaffolding/VS.Web.CG.Mvc/Templates/Blazor/Edit.tt
Original file line number Diff line number Diff line change
Expand Up @@ -55,11 +55,13 @@ else
string propertyShortTypeName = property.ShortTypeName.Replace("?", string.Empty);
var inputTypeName = Model.GetInputType(propertyShortTypeName);
var inputClass = Model.GetInputClassType(propertyShortTypeName);
var requiredHtml = property.IsRequired ? "aria-required=\"true\"" : string.Empty;
var ariaRequiredAttributeHtml = property.IsRequired ? "aria-required=\"true\"" : string.Empty;
var divWhitespace = new string(' ', 16);
var requiredSpanAttributeHtml = property.IsRequired ? $"\r\n{divWhitespace}<span class=\"text-danger\">*</span>" : string.Empty;
#>
<div class="mb-3">
<div class="mb-3"><#= requiredSpanAttributeHtml #>
<label for="<#= modelPropertyNameLowercase #>" class="form-label"><#= modelPropertyName #>:</label>
<<#= inputTypeName #> id="<#= modelPropertyNameLowercase #>" @bind-Value="<#= modelName #>.<#= modelPropertyName #>" class="<#= inputClass #>" <#= requiredHtml #>/>
<<#= inputTypeName #> id="<#= modelPropertyNameLowercase #>" @bind-Value="<#= modelName #>.<#= modelPropertyName #>" class="<#= inputClass #>" <#= ariaRequiredAttributeHtml #>/>
<ValidationMessage For="() => <#= modelName #>.<#= modelPropertyName #>" class="text-danger" />
</div>
<# } #>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,14 +48,15 @@
foreach (var property in Model.ModelMetadata.Properties)
{
var sixteenWhitespace = new string(' ', 16);
var propertyRequiredText = property.IsRequired ? $"\n{sixteenWhitespace}<span class=\"text-danger\">*</span>" : string.Empty;
var propertyRequiredText = property.IsRequired ? $"\r\n{sixteenWhitespace}<span class=\"text-danger\">*</span>" : string.Empty;
var ariaRequiredAttributeHtml = property.IsRequired ? "aria-required=\"true\"" : string.Empty;
if (property.Scaffold && !property.IsAutoGenerated && !property.IsReadOnly)
{
if (property.IsForeignKey)
{
@:<div class="form-group">@propertyRequiredText
@:<label asp-for="@(Model.ModelTypeName)[email protected]" class="control-label"></label>
@:<select asp-for="@(Model.ModelTypeName)[email protected]" class ="form-control" asp-items="[email protected]"></select>
@:<select asp-for="@(Model.ModelTypeName)[email protected]" class ="form-control" asp-items="[email protected]" @ariaRequiredAttributeHtml></select>
@:</div>
continue;
}
Expand All @@ -65,31 +66,31 @@
{
@:<div class="form-group form-check">@propertyRequiredText
@:<label class="form-check-label">
@:<input class="form-check-input" asp-for="@(Model.ModelTypeName)[email protected]" /> @@Html.DisplayNameFor(model => model.@(Model.ModelTypeName).@GetValueExpression(property))
@:<input class="form-check-input" asp-for="@(Model.ModelTypeName)[email protected]" @ariaRequiredAttributeHtml/> @@Html.DisplayNameFor(model => model.@(Model.ModelTypeName).@GetValueExpression(property))
@:</label>
@:</div>
}
else if (property.IsEnum && !property.IsEnumFlags)
{
@:<div class="form-group">@propertyRequiredText
@:<label asp-for="@(Model.ModelTypeName)[email protected]" class="control-label"></label>
@:<select asp-for="@(Model.ModelTypeName)[email protected]" class="form-control"></select>
@:<select asp-for="@(Model.ModelTypeName)[email protected]" class="form-control" @ariaRequiredAttributeHtml></select>
@:<span asp-validation-for="@(Model.ModelTypeName)[email protected]" class="text-danger"></span>
@:</div>
}
else if (property.IsMultilineText)
{
@:<div class="form-group">@propertyRequiredText
@:<label asp-for="@(Model.ModelTypeName)[email protected]" class="control-label"></label>
@:<textarea asp-for="@(Model.ModelTypeName)[email protected]" class="form-control"></textarea>
@:<textarea asp-for="@(Model.ModelTypeName)[email protected]" class="form-control" @ariaRequiredAttributeHtml></textarea>
@:<span asp-validation-for="@(Model.ModelTypeName)[email protected]" class="text-danger"></span>
@:</div>
}
else
{
@:<div class="form-group">@propertyRequiredText
@:<label asp-for="@(Model.ModelTypeName)[email protected]" class="control-label"></label>
@:<input asp-for="@(Model.ModelTypeName)[email protected]" class="form-control" />
@:<input asp-for="@(Model.ModelTypeName)[email protected]" class="form-control" @ariaRequiredAttributeHtml/>
@:<span asp-validation-for="@(Model.ModelTypeName)[email protected]" class="text-danger"></span>
@:</div>
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,8 @@
foreach (PropertyMetadata property in Model.ModelMetadata.Properties)
{
var sixteenWhitespace = new string(' ', 16);
var propertyRequiredText = property.IsRequired ? $"\n{sixteenWhitespace}<span class=\"text-danger\">*</span>" : string.Empty;
var propertyRequiredText = property.IsRequired ? "\r\n<span class=\"text-danger\">*</span>" : string.Empty;
var ariaRequiredAttributeHtml = property.IsRequired ? "aria-required=\"true\"" : string.Empty;
if (property.IsPrimaryKey)
{
@:<input type="hidden" asp-for="@(Model.ModelTypeName)[email protected]" />
Expand All @@ -66,7 +67,7 @@
{
@:<div class="form-group">@propertyRequiredText
@:<label asp-for="@(Model.ModelTypeName)[email protected]" class="control-label"></label>
@:<select asp-for="@(Model.ModelTypeName)[email protected]" class="form-control" asp-items="[email protected]"></select>
@:<select asp-for="@(Model.ModelTypeName)[email protected]" class="form-control" asp-items="[email protected]" @ariaRequiredAttributeHtml></select>
@:<span asp-validation-for="@(Model.ModelTypeName)[email protected]" class="text-danger"></span>
@:</div>
continue;
Expand All @@ -77,31 +78,31 @@
{
@:<div class="form-group form-check">@propertyRequiredText
@:<label class="form-check-label">
@:<input class="form-check-input" asp-for="@(Model.ModelTypeName)[email protected]" /> @@Html.DisplayNameFor(model => model.@(Model.ModelTypeName).@GetValueExpression(property))
@:<input class="form-check-input" asp-for="@(Model.ModelTypeName)[email protected]" @ariaRequiredAttributeHtml/> @@Html.DisplayNameFor(model => model.@(Model.ModelTypeName).@GetValueExpression(property))
@:</label>
@:</div>
}
else if (property.IsEnum && !property.IsEnumFlags)
{
@:<div class="form-group">@propertyRequiredText
@:<label asp-for="@(Model.ModelTypeName)[email protected]" class="control-label"></label>
@:<select asp-for="@(Model.ModelTypeName)[email protected]" class="form-control"></select>
@:<select asp-for="@(Model.ModelTypeName)[email protected]" class="form-control" @ariaRequiredAttributeHtml></select>
@:<span asp-validation-for="@(Model.ModelTypeName)[email protected]" class="text-danger"></span>
@:</div>
}
else if (property.IsMultilineText)
{
@:<div class="form-group">@propertyRequiredText
@:<label asp-for="@(Model.ModelTypeName)[email protected]" class="control-label"></label>
@:<textarea asp-for="@(Model.ModelTypeName)[email protected]" class="form-control"></textarea>
@:<textarea asp-for="@(Model.ModelTypeName)[email protected]" class="form-control" @ariaRequiredAttributeHtml></textarea>
@:<span asp-validation-for="@(Model.ModelTypeName)[email protected]" class="text-danger"></span>
@:</div>
}
else
{
@:<div class="form-group">@propertyRequiredText
@:<label asp-for="@(Model.ModelTypeName)[email protected]" class="control-label"></label>
@:<input asp-for="@(Model.ModelTypeName)[email protected]" class="form-control" />
@:<input asp-for="@(Model.ModelTypeName)[email protected]" class="form-control" @ariaRequiredAttributeHtml/>
@:<span asp-validation-for="@(Model.ModelTypeName)[email protected]" class="text-danger"></span>
@:</div>
}
Expand Down
Loading

0 comments on commit 38a202b

Please sign in to comment.