#asp.net #asp.net-mvc-3 #razor
#asp.net #asp.net-mvc-3 #razor
Вопрос:
Привет, у меня есть класс PersonName, который выглядит следующим образом:
public class PersonName
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string MiddleName { get; set; }
}
У меня есть UserCreateModel, который состоит из PersonName среди других свойств, подобных этому:
public class UserCreateModel
{
public PersonName FullName { get; set; }
public string UserName { get; set; }
...........
}
У меня есть шаблон редактора в / Views/Shared/EditorTemplates/PersonName.cshtml, который выглядит следующим образом (урезан):
@model PersonName
First: @Html.EditorFor(m => m.FirstName)
Last: @Html.EditorFor(m => m.LastName)
Middle: @Html.EditorFor(m => m.Middle)
Однако, когда я делаю (короткая версия) :
@model UserCreateModel
@{Html.BeginForm("Create", "User");}
@Html.EditorForModel()
@{Html.EndForm();}
Имя пользователя не привязывается к редактору и вообще не отображается. Я даже пробовал UIHint, но не уверен, чего мне не хватает. Также как мне отладить эту проблему?
Пожалуйста, помогите!
Ответ №1:
У вас есть шаблон редактора для PersonName
класса ( ~/Views/Shared/EditorTemplates/PersonName.cshtml
), но не для UserCreateModel
, который является вашей основной моделью. Итак, вам нужно либо написать шаблон редактора для UserCreateModel
класса и использовать EditorForModel
, либо указать свойство using EditorFor
следующим образом:
@model UserCreateModel
@using(Html.BeginForm("Create", "User"))
{
@Html.EditorFor(x => x.FullName)
}
Комментарии:
1. Спасибо, Дарин, я попробую это сейчас. Но разве объект по умолчанию.cshtml не должен отображать эту модель и рекурсивно извлекать элементы в базе UserCreateModel на основе UIHint или типа данных и отображать соответственно? Я спрашиваю, потому что другие строковые свойства в классе, такие как электронная почта, работают нормально. Имеет ли это отношение к TemplateDepth в реализации по умолчанию? Извините, я новичок в MVC, поэтому, возможно, я упускаю очевидное.
2. Спасибо, это сработало. Хотя я не уверен, почему он не был рекурсивно подобран — Сообщение в блоге Брэда Уилсона, похоже, намекает на глубокую привязку.
Ответ №2:
Если это точный код, который вы используете, я думаю, вам следует изменить Model в lambda на m
@model PersonName
First: @Html.EditorFor(m => m.FirstName)
Last: @Html.EditorFor(m => m.LastName)
Middle: @Html.EditorFor(m => m.Middle)
и не модель.Имя пользователя и т. Д
Комментарии:
1. Спасибо @archil, да, это m.FirstName. Исправил это в исходном сообщении. Виноват. Но проблема не в этом.
2. -1. Вероятно, это должен был быть комментарий; вы не даете никакого реального ответа на проблему OP.
Ответ №3:
вы должны проверить эту страницу. Я думаю, это то, что вы хотите. В основном говорится, что вам нужно будет создать пользовательский шаблон для модели. Он очень тщательный.
надеюсь, это поможет вам