Browse Source

Treat Id model property as primary key in ASP.NET MVC Details T4 template.

pull/18/head
Matt Ward 14 years ago
parent
commit
bd9fc100fc
  1. 143
      src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/CSharp/CodeTemplates/AddView/AspxCSharp/Details.cs
  2. 72
      src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/CSharp/CodeTemplates/AddView/AspxCSharp/Details.tt
  3. 135
      src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/CSharp/CodeTemplates/AddView/CSHTML/Details.cs
  4. 68
      src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/CSharp/CodeTemplates/AddView/CSHTML/Details.tt
  5. 69
      src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/VisualBasic/CodeTemplates/AddView/AspxVisualBasic/Details.tt
  6. 69
      src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/VisualBasic/CodeTemplates/AddView/VBHTML/Details.tt
  7. 104
      src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/CodeTemplates/AspxCSharpDetailsViewTemplateTests.cs
  8. 105
      src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/CodeTemplates/RazorCSharpDetailsViewTemplateTests.cs

143
src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/CSharp/CodeTemplates/AddView/AspxCSharp/Details.cs

@ -20,7 +20,7 @@ namespace ICSharpCode.AspNet.Mvc.AspxCSharp { @@ -20,7 +20,7 @@ namespace ICSharpCode.AspNet.Mvc.AspxCSharp {
private global::Microsoft.VisualStudio.TextTemplating.ITextTemplatingEngineHost hostValue;
#line 62 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Details.tt"
#line 72 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Details.tt"
MvcTextTemplateHost MvcHost {
get { return (MvcTextTemplateHost)Host; }
@ -29,6 +29,23 @@ namespace ICSharpCode.AspNet.Mvc.AspxCSharp { @@ -29,6 +29,23 @@ namespace ICSharpCode.AspNet.Mvc.AspxCSharp {
public class ModelProperty
{
public string Name { get; set; }
public bool IsPrimaryKey { get; set; }
public ModelProperty(PropertyInfo propertyInfo)
{
this.Name = propertyInfo.Name;
this.IsPrimaryKey = IsPrimaryKeyProperty(propertyInfo);
}
bool IsPrimaryKeyProperty(PropertyInfo propertyInfo)
{
return IsMatchIgnoringCase(propertyInfo.Name, "id");
}
static bool IsMatchIgnoringCase(string a, string b)
{
return String.Equals(a, b, StringComparison.OrdinalIgnoreCase);
}
}
public string GetViewPageType()
@ -40,18 +57,49 @@ namespace ICSharpCode.AspNet.Mvc.AspxCSharp { @@ -40,18 +57,49 @@ namespace ICSharpCode.AspNet.Mvc.AspxCSharp {
return String.Empty;
}
List<ModelProperty> modelProperties;
List<ModelProperty> ModelProperties {
get {
if (modelProperties == null) {
modelProperties = new List<ModelProperty>(GetModelProperties());
}
return modelProperties;
}
}
public IEnumerable<ModelProperty> GetModelProperties()
{
var properties = new List<ModelProperty>();
foreach (PropertyInfo propertyInfo in MvcHost.GetViewDataTypeProperties()) {
properties.Add(CreateModelProperty(propertyInfo));
properties.Add(new ModelProperty(propertyInfo));
}
return properties;
}
ModelProperty CreateModelProperty(PropertyInfo propertyInfo)
bool ModelHasPrimaryKey {
get { return ModelPrimaryKeyName.Length > 0; }
}
string modelPrimaryKeyName;
string ModelPrimaryKeyName {
get {
if (modelPrimaryKeyName == null) {
modelPrimaryKeyName = GetModelPrimaryKeyName();
}
return modelPrimaryKeyName;
}
}
public string GetModelPrimaryKeyName()
{
return new ModelProperty() { Name = propertyInfo.Name };
foreach (ModelProperty modelProperty in ModelProperties) {
if (modelProperty.IsPrimaryKey) {
return modelProperty.Name;
}
}
return "";
}
#line default
@ -222,56 +270,109 @@ namespace ICSharpCode.AspNet.Mvc.AspxCSharp { @@ -222,56 +270,109 @@ namespace ICSharpCode.AspNet.Mvc.AspxCSharp {
#line hidden
#line 34 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Details.tt"
foreach (ModelProperty modelProperty in GetModelProperties()) {
foreach (ModelProperty modelProperty in ModelProperties) {
if (!modelProperty.IsPrimaryKey) {
#line default
#line hidden
#line 35 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Details.tt"
#line 38 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Details.tt"
this.Write("\t\r\n\t<div class=\"display-label\">\r\n\t\t<%: Html.LabelFor(model => model.");
#line default
#line hidden
#line 37 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Details.tt"
this.Write(this.ToStringHelper.ToStringWithCulture( modelProperty.Name));
#line 40 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Details.tt"
this.Write(this.ToStringHelper.ToStringWithCulture( modelProperty.Name ));
#line default
#line hidden
#line 37 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Details.tt"
#line 40 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Details.tt"
this.Write(") %>\r\n\t</div>\r\n\t<div class=\"display-field\">\r\n\t\t<%: Html.DisplayFor(model => model" +
".");
#line default
#line hidden
#line 40 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Details.tt"
this.Write(this.ToStringHelper.ToStringWithCulture( modelProperty.Name));
#line 43 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Details.tt"
this.Write(this.ToStringHelper.ToStringWithCulture( modelProperty.Name ));
#line default
#line hidden
#line 40 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Details.tt"
#line 43 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Details.tt"
this.Write(") %>\r\n\t</div>\r\n");
#line default
#line hidden
#line 42 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Details.tt"
#line 45 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Details.tt"
}
}
#line default
#line hidden
#line 49 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Details.tt"
this.Write("</fieldset>\r\n<p>\r\n");
#line default
#line hidden
#line 51 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Details.tt"
if (ModelHasPrimaryKey) {
#line default
#line hidden
#line 52 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Details.tt"
this.Write("\t<%: Html.ActionLink(\"Edit\", \"Edit\", new { id = Model.");
#line default
#line hidden
#line 52 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Details.tt"
this.Write(this.ToStringHelper.ToStringWithCulture( ModelPrimaryKeyName ));
#line default
#line hidden
#line 52 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Details.tt"
this.Write(" }) %> |\r\n");
#line default
#line hidden
#line 53 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Details.tt"
} else {
#line default
#line hidden
#line 54 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Details.tt"
this.Write("\t<%: Html.ActionLink(\"Edit\", \"Edit\") %> |\r\n");
#line default
#line hidden
#line 55 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Details.tt"
}
#line default
#line hidden
#line 43 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Details.tt"
this.Write("</fieldset>\r\n<p>\r\n\t<%: Html.ActionLink(\"Edit\", \"Edit\") %> |\r\n\t<%: Html.ActionLink" +
"(\"Back\", \"Index\") %>\r\n</p>\r\n");
#line 56 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Details.tt"
this.Write("\t<%: Html.ActionLink(\"Back\", \"Index\") %>\r\n</p>\r\n");
#line default
#line hidden
#line 48 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Details.tt"
#line 58 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Details.tt"
if (MvcHost.IsPartialView) {
// Do nothing.
@ -282,13 +383,13 @@ namespace ICSharpCode.AspNet.Mvc.AspxCSharp { @@ -282,13 +383,13 @@ namespace ICSharpCode.AspNet.Mvc.AspxCSharp {
#line default
#line hidden
#line 54 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Details.tt"
#line 64 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Details.tt"
this.Write("</asp:Content>\r\n");
#line default
#line hidden
#line 55 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Details.tt"
#line 65 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Details.tt"
} else {
PopIndent();
@ -297,13 +398,13 @@ namespace ICSharpCode.AspNet.Mvc.AspxCSharp { @@ -297,13 +398,13 @@ namespace ICSharpCode.AspNet.Mvc.AspxCSharp {
#line default
#line hidden
#line 59 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Details.tt"
#line 69 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Details.tt"
this.Write("\t</body>\r\n</html>\r\n");
#line default
#line hidden
#line 61 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Details.tt"
#line 71 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Details.tt"
}
#line default

72
src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/CSharp/CodeTemplates/AddView/AspxCSharp/Details.tt

@ -31,18 +31,28 @@ @@ -31,18 +31,28 @@
#>
<fieldset>
<legend><#= MvcHost.ViewDataType.Name #></legend>
<# foreach (ModelProperty modelProperty in GetModelProperties()) { #>
<#
foreach (ModelProperty modelProperty in ModelProperties) {
if (!modelProperty.IsPrimaryKey) {
#>
<div class="display-label">
<%: Html.LabelFor(model => model.<#= modelProperty.Name#>) %>
<%: Html.LabelFor(model => model.<#= modelProperty.Name #>) %>
</div>
<div class="display-field">
<%: Html.DisplayFor(model => model.<#= modelProperty.Name#>) %>
<%: Html.DisplayFor(model => model.<#= modelProperty.Name #>) %>
</div>
<# } #>
<#
}
}
#>
</fieldset>
<p>
<# if (ModelHasPrimaryKey) { #>
<%: Html.ActionLink("Edit", "Edit", new { id = Model.<#= ModelPrimaryKeyName #> }) %> |
<# } else { #>
<%: Html.ActionLink("Edit", "Edit") %> |
<# } #>
<%: Html.ActionLink("Back", "Index") %>
</p>
<#
@ -67,6 +77,23 @@ @@ -67,6 +77,23 @@
public class ModelProperty
{
public string Name { get; set; }
public bool IsPrimaryKey { get; set; }
public ModelProperty(PropertyInfo propertyInfo)
{
this.Name = propertyInfo.Name;
this.IsPrimaryKey = IsPrimaryKeyProperty(propertyInfo);
}
bool IsPrimaryKeyProperty(PropertyInfo propertyInfo)
{
return IsMatchIgnoringCase(propertyInfo.Name, "id");
}
static bool IsMatchIgnoringCase(string a, string b)
{
return String.Equals(a, b, StringComparison.OrdinalIgnoreCase);
}
}
public string GetViewPageType()
@ -78,17 +105,48 @@ @@ -78,17 +105,48 @@
return String.Empty;
}
List<ModelProperty> modelProperties;
List<ModelProperty> ModelProperties {
get {
if (modelProperties == null) {
modelProperties = new List<ModelProperty>(GetModelProperties());
}
return modelProperties;
}
}
public IEnumerable<ModelProperty> GetModelProperties()
{
var properties = new List<ModelProperty>();
foreach (PropertyInfo propertyInfo in MvcHost.GetViewDataTypeProperties()) {
properties.Add(CreateModelProperty(propertyInfo));
properties.Add(new ModelProperty(propertyInfo));
}
return properties;
}
ModelProperty CreateModelProperty(PropertyInfo propertyInfo)
bool ModelHasPrimaryKey {
get { return ModelPrimaryKeyName.Length > 0; }
}
string modelPrimaryKeyName;
string ModelPrimaryKeyName {
get {
if (modelPrimaryKeyName == null) {
modelPrimaryKeyName = GetModelPrimaryKeyName();
}
return modelPrimaryKeyName;
}
}
public string GetModelPrimaryKeyName()
{
return new ModelProperty() { Name = propertyInfo.Name };
foreach (ModelProperty modelProperty in ModelProperties) {
if (modelProperty.IsPrimaryKey) {
return modelProperty.Name;
}
}
return "";
}
#>

135
src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/CSharp/CodeTemplates/AddView/CSHTML/Details.cs

@ -20,7 +20,7 @@ namespace ICSharpCode.AspNet.Mvc.CSHtml { @@ -20,7 +20,7 @@ namespace ICSharpCode.AspNet.Mvc.CSHtml {
private global::Microsoft.VisualStudio.TextTemplating.ITextTemplatingEngineHost hostValue;
#line 58 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\Details.tt"
#line 68 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\Details.tt"
MvcTextTemplateHost MvcHost {
get { return (MvcTextTemplateHost)Host; }
@ -29,6 +29,23 @@ namespace ICSharpCode.AspNet.Mvc.CSHtml { @@ -29,6 +29,23 @@ namespace ICSharpCode.AspNet.Mvc.CSHtml {
public class ModelProperty
{
public string Name { get; set; }
public bool IsPrimaryKey { get; set; }
public ModelProperty(PropertyInfo propertyInfo)
{
this.Name = propertyInfo.Name;
this.IsPrimaryKey = IsPrimaryKeyProperty(propertyInfo);
}
bool IsPrimaryKeyProperty(PropertyInfo propertyInfo)
{
return IsMatchIgnoringCase(propertyInfo.Name, "id");
}
static bool IsMatchIgnoringCase(string a, string b)
{
return String.Equals(a, b, StringComparison.OrdinalIgnoreCase);
}
}
public string GetModelDirective()
@ -40,18 +57,49 @@ namespace ICSharpCode.AspNet.Mvc.CSHtml { @@ -40,18 +57,49 @@ namespace ICSharpCode.AspNet.Mvc.CSHtml {
return String.Empty;
}
List<ModelProperty> modelProperties;
List<ModelProperty> ModelProperties {
get {
if (modelProperties == null) {
modelProperties = new List<ModelProperty>(GetModelProperties());
}
return modelProperties;
}
}
public IEnumerable<ModelProperty> GetModelProperties()
{
var properties = new List<ModelProperty>();
foreach (PropertyInfo propertyInfo in MvcHost.GetViewDataTypeProperties()) {
properties.Add(CreateModelProperty(propertyInfo));
properties.Add(new ModelProperty(propertyInfo));
}
return properties;
}
ModelProperty CreateModelProperty(PropertyInfo propertyInfo)
bool ModelHasPrimaryKey {
get { return ModelPrimaryKeyName.Length > 0; }
}
string modelPrimaryKeyName;
string ModelPrimaryKeyName {
get {
if (modelPrimaryKeyName == null) {
modelPrimaryKeyName = GetModelPrimaryKeyName();
}
return modelPrimaryKeyName;
}
}
public string GetModelPrimaryKeyName()
{
return new ModelProperty() { Name = propertyInfo.Name };
foreach (ModelProperty modelProperty in ModelProperties) {
if (modelProperty.IsPrimaryKey) {
return modelProperty.Name;
}
}
return "";
}
#line default
@ -188,55 +236,108 @@ namespace ICSharpCode.AspNet.Mvc.CSHtml { @@ -188,55 +236,108 @@ namespace ICSharpCode.AspNet.Mvc.CSHtml {
#line hidden
#line 35 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\Details.tt"
foreach (ModelProperty modelProperty in GetModelProperties()) {
foreach (ModelProperty modelProperty in ModelProperties) {
if (!modelProperty.IsPrimaryKey) {
#line default
#line hidden
#line 36 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\Details.tt"
#line 39 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\Details.tt"
this.Write("\t\r\n\t<div class=\"display-label\">\r\n\t\t@Html.LabelFor(model => model.");
#line default
#line hidden
#line 38 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\Details.tt"
#line 41 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\Details.tt"
this.Write(this.ToStringHelper.ToStringWithCulture( modelProperty.Name ));
#line default
#line hidden
#line 38 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\Details.tt"
#line 41 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\Details.tt"
this.Write(")\r\n\t</div>\r\n\t<div class=\"display-field\">\r\n\t\t@Html.DisplayFor(model => model.");
#line default
#line hidden
#line 41 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\Details.tt"
#line 44 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\Details.tt"
this.Write(this.ToStringHelper.ToStringWithCulture( modelProperty.Name ));
#line default
#line hidden
#line 41 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\Details.tt"
#line 44 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\Details.tt"
this.Write(")\r\n\t</div>\r\n");
#line default
#line hidden
#line 43 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\Details.tt"
#line 46 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\Details.tt"
}
}
#line default
#line hidden
#line 50 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\Details.tt"
this.Write("</fieldset>\r\n<p>\r\n");
#line default
#line hidden
#line 52 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\Details.tt"
if (ModelHasPrimaryKey) {
#line default
#line hidden
#line 53 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\Details.tt"
this.Write("\t@Html.ActionLink(\"Edit\", \"Edit\", new { id = Model.");
#line default
#line hidden
#line 53 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\Details.tt"
this.Write(this.ToStringHelper.ToStringWithCulture( ModelPrimaryKeyName ));
#line default
#line hidden
#line 53 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\Details.tt"
this.Write(" }) |\r\n");
#line default
#line hidden
#line 54 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\Details.tt"
} else {
#line default
#line hidden
#line 55 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\Details.tt"
this.Write("\t@Html.ActionLink(\"Edit\", \"Edit\") |\r\n");
#line default
#line hidden
#line 56 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\Details.tt"
}
#line default
#line hidden
#line 44 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\Details.tt"
this.Write("</fieldset>\r\n<p>\r\n\t@Html.ActionLink(\"Edit\", \"Edit\") |\r\n\t@Html.ActionLink(\"Back\", " +
"\"Index\")\r\n</p>\r\n");
#line 57 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\Details.tt"
this.Write("\t@Html.ActionLink(\"Back\", \"Index\")\r\n</p>\r\n");
#line default
#line hidden
#line 49 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\Details.tt"
#line 59 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\Details.tt"
if (MvcHost.IsPartialView) {
// Do nothing.
@ -247,13 +348,13 @@ namespace ICSharpCode.AspNet.Mvc.CSHtml { @@ -247,13 +348,13 @@ namespace ICSharpCode.AspNet.Mvc.CSHtml {
#line default
#line hidden
#line 55 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\Details.tt"
#line 65 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\Details.tt"
this.Write("\t</body>\r\n</html>\r\n");
#line default
#line hidden
#line 57 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\Details.tt"
#line 67 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\Details.tt"
}
#line default

68
src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/CSharp/CodeTemplates/AddView/CSHTML/Details.tt

@ -32,7 +32,10 @@ @@ -32,7 +32,10 @@
#>
<fieldset>
<legend><#= MvcHost.ViewDataType.Name #></legend>
<# foreach (ModelProperty modelProperty in GetModelProperties()) { #>
<#
foreach (ModelProperty modelProperty in ModelProperties) {
if (!modelProperty.IsPrimaryKey) {
#>
<div class="display-label">
@Html.LabelFor(model => model.<#= modelProperty.Name #>)
@ -40,10 +43,17 @@ @@ -40,10 +43,17 @@
<div class="display-field">
@Html.DisplayFor(model => model.<#= modelProperty.Name #>)
</div>
<# } #>
<#
}
}
#>
</fieldset>
<p>
<# if (ModelHasPrimaryKey) { #>
@Html.ActionLink("Edit", "Edit", new { id = Model.<#= ModelPrimaryKeyName #> }) |
<# } else { #>
@Html.ActionLink("Edit", "Edit") |
<# } #>
@Html.ActionLink("Back", "Index")
</p>
<#
@ -63,6 +73,23 @@ @@ -63,6 +73,23 @@
public class ModelProperty
{
public string Name { get; set; }
public bool IsPrimaryKey { get; set; }
public ModelProperty(PropertyInfo propertyInfo)
{
this.Name = propertyInfo.Name;
this.IsPrimaryKey = IsPrimaryKeyProperty(propertyInfo);
}
bool IsPrimaryKeyProperty(PropertyInfo propertyInfo)
{
return IsMatchIgnoringCase(propertyInfo.Name, "id");
}
static bool IsMatchIgnoringCase(string a, string b)
{
return String.Equals(a, b, StringComparison.OrdinalIgnoreCase);
}
}
public string GetModelDirective()
@ -74,17 +101,48 @@ @@ -74,17 +101,48 @@
return String.Empty;
}
List<ModelProperty> modelProperties;
List<ModelProperty> ModelProperties {
get {
if (modelProperties == null) {
modelProperties = new List<ModelProperty>(GetModelProperties());
}
return modelProperties;
}
}
public IEnumerable<ModelProperty> GetModelProperties()
{
var properties = new List<ModelProperty>();
foreach (PropertyInfo propertyInfo in MvcHost.GetViewDataTypeProperties()) {
properties.Add(CreateModelProperty(propertyInfo));
properties.Add(new ModelProperty(propertyInfo));
}
return properties;
}
ModelProperty CreateModelProperty(PropertyInfo propertyInfo)
bool ModelHasPrimaryKey {
get { return ModelPrimaryKeyName.Length > 0; }
}
string modelPrimaryKeyName;
string ModelPrimaryKeyName {
get {
if (modelPrimaryKeyName == null) {
modelPrimaryKeyName = GetModelPrimaryKeyName();
}
return modelPrimaryKeyName;
}
}
public string GetModelPrimaryKeyName()
{
return new ModelProperty() { Name = propertyInfo.Name };
foreach (ModelProperty modelProperty in ModelProperties) {
if (modelProperty.IsPrimaryKey) {
return modelProperty.Name;
}
}
return "";
}
#>

69
src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/VisualBasic/CodeTemplates/AddView/AspxVisualBasic/Details.tt

@ -32,7 +32,10 @@ @@ -32,7 +32,10 @@
#>
<fieldset>
<legend><#= MvcHost.ViewDataType.Name #></legend>
<# For Each modelProperty As ModelProperty in GetModelProperties() #>
<#
For Each modelProperty As ModelProperty in ModelProperties
If Not modelProperty.IsPrimaryKey Then
#>
<div class="display-label">
<%: Html.LabelFor(Function(model) model.<#= modelProperty.Name #>) %>
@ -40,10 +43,17 @@ @@ -40,10 +43,17 @@
<div class="display-field">
<%: Html.DisplayFor(Function(model) model.<#= modelProperty.Name #>) %>
</div>
<# Next #>
<#
End If
Next
#>
</fieldset>
<p>
<# If ModelHasPrimaryKey Then #>
<%: Html.ActionLink("Edit", "Edit", New With { .id = Model.<#= ModelPrimaryKeyName #> }) %> |
<# Else #>
<%: Html.ActionLink("Edit", "Edit") %> |
<# End If #>
<%: Html.ActionLink("Back", "Index") %>
</p>
<#
@ -68,7 +78,21 @@ @@ -68,7 +78,21 @@
End Property
Public Class ModelProperty
Public Property Name As String
Public Property Name() As String
Public Property IsPrimaryKey() As Boolean
Public Sub New(ByVal propertyInfo As PropertyInfo)
Me.Name = propertyInfo.Name
Me.IsPrimaryKey = IsPrimaryKeyProperty(propertyInfo)
End Sub
Function IsPrimaryKeyProperty(ByVal propertyInfo As PropertyInfo) As Boolean
Return IsMatchIgnoringCase(propertyInfo.Name, "id")
End Function
Shared Function IsMatchIgnoringCase(ByVal a As String, ByVal b as String) As Boolean
Return String.Equals(a, b, StringComparison.OrdinalIgnoreCase)
End Function
End Class
Public Function GetViewPageType() As String
@ -79,15 +103,48 @@ @@ -79,15 +103,48 @@
Return String.Empty
End Function
Private modelPropertiesList As List(Of ModelProperty)
ReadOnly Property ModelProperties() As List(Of ModelProperty)
Get
If modelPropertiesList Is Nothing Then
modelPropertiesList = New List(Of ModelProperty)(GetModelProperties())
End If
Return modelPropertiesList
End Get
End Property
Public Function GetModelProperties() As IEnumerable(Of ModelProperty)
Dim properties = New List(Of ModelProperty)()
For Each propertyInfo As PropertyInfo In MvcHost.GetViewDataTypeProperties()
properties.Add(CreateModelProperty(propertyInfo))
properties.Add(new ModelProperty(propertyInfo))
Next
Return properties
End Function
Function CreateModelProperty(ByVal propertyInfo As PropertyInfo) As ModelProperty
Return New ModelProperty() With { .Name = propertyInfo.Name }
ReadOnly Property ModelHasPrimaryKey As Boolean
Get
Return ModelPrimaryKeyName.Length > 0
End Get
End Property
Private modelPrimaryKeyNameValue As String
ReadOnly Property ModelPrimaryKeyName() As String
Get
If modelPrimaryKeyNameValue Is Nothing Then
modelPrimaryKeyNameValue = GetModelPrimaryKeyName()
End If
Return modelPrimaryKeyNameValue
End Get
End Property
Public Function GetModelPrimaryKeyName() As String
For Each modelProperty As ModelProperty in ModelProperties
If modelProperty.IsPrimaryKey Then
Return modelProperty.Name
End If
Next
Return ""
End Function
#>

69
src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/VisualBasic/CodeTemplates/AddView/VBHTML/Details.tt

@ -33,7 +33,10 @@ End Code @@ -33,7 +33,10 @@ End Code
#>
<fieldset>
<legend><#= MvcHost.ViewDataType.Name #></legend>
<# For Each modelProperty As ModelProperty in GetModelProperties() #>
<#
For Each modelProperty As ModelProperty in ModelProperties
If Not modelProperty.IsPrimaryKey Then
#>
<div class="display-label">
@Html.LabelFor(Function(model) model.<#= modelProperty.Name #>)
@ -41,10 +44,17 @@ End Code @@ -41,10 +44,17 @@ End Code
<div class="display-field">
@Html.DisplayFor(Function(model) model.<#= modelProperty.Name #>)
</div>
<# Next #>
<#
End If
Next
#>
</fieldset>
<p>
<# If ModelHasPrimaryKey Then #>
@Html.ActionLink("Edit", "Edit", New With { .id = Model.<#= ModelPrimaryKeyName #> }) %> |
<# Else #>
@Html.ActionLink("Edit", "Edit") |
<# End If #>
@Html.ActionLink("Back", "Index")
</p>
<#
@ -64,7 +74,21 @@ End Code @@ -64,7 +74,21 @@ End Code
End Property
Public Class ModelProperty
Public Property Name As String
Public Property Name() As String
Public Property IsPrimaryKey() As Boolean
Public Sub New(ByVal propertyInfo As PropertyInfo)
Me.Name = propertyInfo.Name
Me.IsPrimaryKey = IsPrimaryKeyProperty(propertyInfo)
End Sub
Function IsPrimaryKeyProperty(ByVal propertyInfo As PropertyInfo) As Boolean
Return IsMatchIgnoringCase(propertyInfo.Name, "id")
End Function
Shared Function IsMatchIgnoringCase(ByVal a As String, ByVal b as String) As Boolean
Return String.Equals(a, b, StringComparison.OrdinalIgnoreCase)
End Function
End Class
Function GetModelDirective() As String
@ -75,15 +99,48 @@ End Code @@ -75,15 +99,48 @@ End Code
Return String.Empty
End Function
Private modelPropertiesList As List(Of ModelProperty)
ReadOnly Property ModelProperties() As List(Of ModelProperty)
Get
If modelPropertiesList Is Nothing Then
modelPropertiesList = New List(Of ModelProperty)(GetModelProperties())
End If
Return modelPropertiesList
End Get
End Property
Public Function GetModelProperties() As IEnumerable(Of ModelProperty)
Dim properties = New List(Of ModelProperty)()
For Each propertyInfo As PropertyInfo In MvcHost.GetViewDataTypeProperties()
properties.Add(CreateModelProperty(propertyInfo))
properties.Add(new ModelProperty(propertyInfo))
Next
Return properties
End Function
Function CreateModelProperty(ByVal propertyInfo As PropertyInfo) As ModelProperty
Return New ModelProperty() With { .Name = propertyInfo.Name }
ReadOnly Property ModelHasPrimaryKey As Boolean
Get
Return ModelPrimaryKeyName.Length > 0
End Get
End Property
Private modelPrimaryKeyNameValue As String
ReadOnly Property ModelPrimaryKeyName() As String
Get
If modelPrimaryKeyNameValue Is Nothing Then
modelPrimaryKeyNameValue = GetModelPrimaryKeyName()
End If
Return modelPrimaryKeyNameValue
End Get
End Property
Public Function GetModelPrimaryKeyName() As String
For Each modelProperty As ModelProperty in ModelProperties
If modelProperty.IsPrimaryKey Then
Return modelProperty.Name
End If
Next
Return ""
End Function
#>

104
src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/CodeTemplates/AspxCSharpDetailsViewTemplateTests.cs

@ -35,6 +35,11 @@ namespace AspNet.Mvc.Tests.CodeTemplates @@ -35,6 +35,11 @@ namespace AspNet.Mvc.Tests.CodeTemplates
return GetModelProperties().First();
}
Details.ModelProperty GetModelProperty(string name)
{
return GetModelProperties().First(p => p.Name == name);
}
[Test]
public void GetViewPageType_HostViewDataTypeNameIsMyAppMyModel_ReturnsMyAppMyModelSurroundedByAngleBrackets()
{
@ -244,5 +249,104 @@ MyView @@ -244,5 +249,104 @@ MyView
";
Assert.AreEqual(expectedOutput, output);
}
[Test]
public void TransformText_ModelHasIdProperty_EditActionLinkUsesModelIdProperty()
{
CreateViewTemplatePreprocessor();
mvcHost.IsPartialView = true;
Type modelType = typeof(ModelWithIdProperty);
mvcHost.ViewDataType = modelType;
mvcHost.ViewDataTypeName = modelType.FullName;
mvcHost.ViewName = "MyView";
string output = templatePreprocessor.TransformText();
string expectedOutput =
@"<%@ Control Language=""C#"" Inherits=""System.Web.Mvc.ViewUserControl<AspNet.Mvc.Tests.CodeTemplates.Models.ModelWithIdProperty>"" %>
<fieldset>
<legend>ModelWithIdProperty</legend>
<div class=""display-label"">
<%: Html.LabelFor(model => model.Name) %>
</div>
<div class=""display-field"">
<%: Html.DisplayFor(model => model.Name) %>
</div>
</fieldset>
<p>
<%: Html.ActionLink(""Edit"", ""Edit"", new { id = Model.Id }) %> |
<%: Html.ActionLink(""Back"", ""Index"") %>
</p>
";
Assert.AreEqual(expectedOutput, output);
}
[Test]
public void GetModelProperties_ModelHasIdAndNameProperty_IdPropertyIsMarkedAsPrimaryKey()
{
CreateViewTemplatePreprocessor();
mvcHost.ViewDataType = typeof(ModelWithIdProperty);
Details.ModelProperty modelProperty = GetModelProperty("Id");
Assert.IsTrue(modelProperty.IsPrimaryKey);
}
[Test]
public void GetModelProperties_ModelHasIdAndNameProperty_NamePropertyIsNotMarkedAsPrimaryKey()
{
CreateViewTemplatePreprocessor();
mvcHost.ViewDataType = typeof(ModelWithIdProperty);
Details.ModelProperty modelProperty = GetModelProperty("Name");
Assert.IsFalse(modelProperty.IsPrimaryKey);
}
[Test]
public void GetModelProperties_ModelHasIdPropertyInLowerCase_IdPropertyIsMarkedAsPrimaryKey()
{
CreateViewTemplatePreprocessor();
mvcHost.ViewDataType = typeof(ModelWithIdPropertyInLowerCase);
Details.ModelProperty modelProperty = GetModelProperty("id");
Assert.IsTrue(modelProperty.IsPrimaryKey);
}
[Test]
public void GetModelPrimaryKeyName_ModelHasIdAndNameProperty_ReturnsId()
{
CreateViewTemplatePreprocessor();
mvcHost.ViewDataType = typeof(ModelWithIdProperty);
string primaryKeyName = templatePreprocessor.GetModelPrimaryKeyName();
Assert.AreEqual("Id", primaryKeyName);
}
[Test]
public void GetModelPrimaryKeyName_ModelHasIdPropertyInLowerCase_ReturnsLowercaseId()
{
CreateViewTemplatePreprocessor();
mvcHost.ViewDataType = typeof(ModelWithIdPropertyInLowerCase);
string primaryKeyName = templatePreprocessor.GetModelPrimaryKeyName();
Assert.AreEqual("id", primaryKeyName);
}
[Test]
public void GetModelPrimaryKeyName_ModelHasNameProperty_ReturnsEmptyString()
{
CreateViewTemplatePreprocessor();
mvcHost.ViewDataType = typeof(ModelWithOneProperty);
string primaryKeyName = templatePreprocessor.GetModelPrimaryKeyName();
Assert.AreEqual(String.Empty, primaryKeyName);
}
}
}

105
src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/CodeTemplates/RazorCSharpDetailsViewTemplateTests.cs

@ -35,6 +35,11 @@ namespace AspNet.Mvc.Tests.CodeTemplates @@ -35,6 +35,11 @@ namespace AspNet.Mvc.Tests.CodeTemplates
return GetModelProperties().First();
}
Details.ModelProperty GetModelProperty(string name)
{
return GetModelProperties().First(p => p.Name == name);
}
[Test]
public void GetModelDirective_HostViewDataTypeNameIsMyAppMyModel_ReturnsRazorModelFollowedByMyAppMyModel()
{
@ -205,6 +210,7 @@ namespace AspNet.Mvc.Tests.CodeTemplates @@ -205,6 +210,7 @@ namespace AspNet.Mvc.Tests.CodeTemplates
";
Assert.AreEqual(expectedOutput, output);
}
[Test]
public void TransformText_ModelHasTwoPropertiesAndIsPartialView_ReturnsControlWithHtmlHelperForModelProperties()
{
@ -244,5 +250,104 @@ namespace AspNet.Mvc.Tests.CodeTemplates @@ -244,5 +250,104 @@ namespace AspNet.Mvc.Tests.CodeTemplates
";
Assert.AreEqual(expectedOutput, output);
}
[Test]
public void TransformText_ModelHasIdPropertyAndIsPartialView_IdPropertyIsMarkedAsPrimaryKey()
{
CreateViewTemplatePreprocessor();
mvcHost.IsPartialView = true;
Type modelType = typeof(ModelWithIdProperty);
mvcHost.ViewDataType = modelType;
mvcHost.ViewDataTypeName = modelType.FullName;
mvcHost.ViewName = "MyView";
string output = templatePreprocessor.TransformText();
string expectedOutput =
@"@model AspNet.Mvc.Tests.CodeTemplates.Models.ModelWithIdProperty
<fieldset>
<legend>ModelWithIdProperty</legend>
<div class=""display-label"">
@Html.LabelFor(model => model.Name)
</div>
<div class=""display-field"">
@Html.DisplayFor(model => model.Name)
</div>
</fieldset>
<p>
@Html.ActionLink(""Edit"", ""Edit"", new { id = Model.Id }) |
@Html.ActionLink(""Back"", ""Index"")
</p>
";
Assert.AreEqual(expectedOutput, output);
}
[Test]
public void GetModelProperties_ModelHasIdAndNameProperty_IdPropertyIsMarkedAsPrimaryKey()
{
CreateViewTemplatePreprocessor();
mvcHost.ViewDataType = typeof(ModelWithIdProperty);
Details.ModelProperty modelProperty = GetModelProperty("Id");
Assert.IsTrue(modelProperty.IsPrimaryKey);
}
[Test]
public void GetModelProperties_ModelHasIdAndNameProperty_NamePropertyIsNotMarkedAsPrimaryKey()
{
CreateViewTemplatePreprocessor();
mvcHost.ViewDataType = typeof(ModelWithIdProperty);
Details.ModelProperty modelProperty = GetModelProperty("Name");
Assert.IsFalse(modelProperty.IsPrimaryKey);
}
[Test]
public void GetModelProperties_ModelHasIdPropertyInLowerCase_IdPropertyIsMarkedAsPrimaryKey()
{
CreateViewTemplatePreprocessor();
mvcHost.ViewDataType = typeof(ModelWithIdPropertyInLowerCase);
Details.ModelProperty modelProperty = GetModelProperty("id");
Assert.IsTrue(modelProperty.IsPrimaryKey);
}
[Test]
public void GetModelPrimaryKeyName_ModelHasIdAndNameProperty_ReturnsId()
{
CreateViewTemplatePreprocessor();
mvcHost.ViewDataType = typeof(ModelWithIdProperty);
string primaryKeyName = templatePreprocessor.GetModelPrimaryKeyName();
Assert.AreEqual("Id", primaryKeyName);
}
[Test]
public void GetModelPrimaryKeyName_ModelHasIdPropertyInLowerCase_ReturnsLowercaseId()
{
CreateViewTemplatePreprocessor();
mvcHost.ViewDataType = typeof(ModelWithIdPropertyInLowerCase);
string primaryKeyName = templatePreprocessor.GetModelPrimaryKeyName();
Assert.AreEqual("id", primaryKeyName);
}
[Test]
public void GetModelPrimaryKeyName_ModelHasNameProperty_ReturnsEmptyString()
{
CreateViewTemplatePreprocessor();
mvcHost.ViewDataType = typeof(ModelWithOneProperty);
string primaryKeyName = templatePreprocessor.GetModelPrimaryKeyName();
Assert.AreEqual(String.Empty, primaryKeyName);
}
}
}

Loading…
Cancel
Save