#entity-framework #asp.net-mvc-4 #ef-code-first #asp.net-mvc-scaffolding
#entity-framework #asp.net-mvc-4 #ef-code-first #asp.net-mvc-scaffolding
Вопрос:
Я создаю приложение MVC4, используя базу данных EF Code First. Я работаю с некоторыми объявлениями внешнего ключа. Я хочу использовать определение поля для отображения в выпадающем списке в строительных лесах в объявлениях моделей. Например:
Мое упрощенное объявление модели выглядит следующим образом:
public class Contact
{
public int ID { get; set; }
public string Prefix { get; set; }
public string First { get; set; }
public string Middle { get; set; }
public string Last { get; set; }
public string FullName
{
get { return (Last ", " First " " Middle).Trim(); }
}
}
public class Role
{
public int ID { get; set; }
public string RoleName { get; set; }
public string RoleDescription { get; set; }
}
public class RoleAssignment
{
[Key]
public int ID { get; set; }
[ForeignKey("Contact")]
public int Contact_ID { get; set; }
public virtual Contact Contact { get; set; }
[ForeignKey("Role")]
public int Role_ID { get; set; }
public virtual Role Role { get; set; }
}
Я создаю стандартные строительные леса, и edit .cshtml выглядит следующим образом:
<fieldset>
<legend>RoleAssignment</legend>
@Html.HiddenFor(model => model.ID)
<div class="editor-label">
@Html.LabelFor(model => model.Contact_ID, "Contact")
</div>
<div class="editor-field">
@Html.DropDownList("Contact_ID", String.Empty)
@Html.ValidationMessageFor(model => model.Contact_ID)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Role_ID, "Role")
</div>
<div class="editor-field">
@Html.DropDownList("Role_ID", String.Empty)
@Html.ValidationMessageFor(model => model.Role_ID)
</div>
<p>
<input type="submit" value="Save" />
</p>
</fieldset>
Однако в раскрывающемся списке используется поле «Префикс» для выпадающего списка и отображения. Я хочу, чтобы оно использовало поле «Полное имя». Как мне указать это в объявлении модели Contact? (Я знаю, как это сделать, изменив код .cshtml, но я хочу, чтобы он работал с чистым сгенерированным кодом.)
Ответ №1:
ОК. Разобрался со всем этим. Чтобы указать пользовательское поле именования для вашей таблицы в раскрывающихся списках, используйте «DisplayColumn» в классе модели, а затем используйте атрибут «NotMapped», чтобы предотвратить отображение пользовательского поля отображения в базу данных, и дайте ему параметр настройки, который ничего не делает:
[DisplayColumn("FullName")]
public class Contact
{
public int ID { get; set; }
[NotMapped]
[Display(Name = "Full Name")]
public string FullName
{
get { return (Last ", " First " " Middle).Trim(); }
}
public string Prefix { get; set; }
public string First { get; set; }
public string Middle { get; set; }
public string Last { get; set; } }
Ответ №2:
У меня есть частичный ответ на мой вопрос:
Добавление атрибута «DisplayColumn» в класс модели позволяет изменить поле отображения для строительных лесов следующим образом:
[DisplayColumn("First")]
public class Contact
{
public int ID { get; set; }
[Display(Name = "Full Name")]
public string FullName
{
get { return (Last ", " First " " Middle).Trim(); }
}
public string Prefix { get; set; }
public string First { get; set; }
}
Однако это не работает с полем «Полное имя», доступным только для чтения. Все еще пытаюсь это выяснить…
Комментарии:
1. Это работает, вам просто нужно добавить
[NotMapped]
потому что да, это не столбец в вашей базе данных