Я - бесшумный читатель stackoverflow, и почти во всех случаях я нахожу решение своих проблем из сообщений других пользователей с этого сайта до вчерашнего дня, когда я застрял на чем-то и не смог найти решение.ASP MVC EditorTemplates для ComplexType
Вот небольшое объяснение на моем приложение архитектуры:
У меня есть код-первых сущностей модели в отдельной C# проекта и я ссылаться на него в моем веб-проекта. У меня есть следующие объекты:
public class Employee
{
public Employee();
public int EmployeeId {get;set;}
public DateTime? DegreeCompleted{ get; set; }
public virtual University University { get; set; }
}
public class University
{
public University();
public int UniversityId {get;set;}
public short? TotalDegrees{ get; set; }
public short? TempTotalDegrees{ get; set; }
}
На вид сбоку, у меня есть вид дома с Index.cshtml, который со ссылкой Views/Shared/EditorTemplates/University.cshtml
как это:
@using (Ajax.BeginForm("SaveEmployee", new AjaxOptions
{
HttpMethod="POST",
OnBegin="disableSubmit",
OnComplete = "enableSubmit",
OnFailure = "enableSubmit",
InsertionMode=InsertionMode.Replace
}))
{
@Html.HiddenFor(model=>model.EmployeeId)
@Html.EditorFor(m => m.University, new { EmployeeId = Model.EmployeeId})
Вот как выглядит University.cshtml:
@Html.HiddenFor(model=>model.UniversityId)
@Html.TextBoxFor(x => Model.TotalDegrees, new { @class="form-control", @min="5",@max="100",@type="number",@value=(Model.TotalDegrees.HasValue ? Model.TotalDegrees.Value : 5)})
on Index.cshtml, когда я нажимаю кнопку отправки, он возвращает объект Employee на сервер, но
Employee.University.TotalDegrees является недействительным, даже если пользователь заполняет значение
Если удалить @Html.HiddenFor(model=>model.UniversityId)
из University.cshtml, Employee.University
приходит утратившим по почте.
Я пытался использовать @Html.EditorFor(model=>model.TotalDegrees)
и @Html.TextBoxFor(model=>model.TotalDegrees)
, но ни один из них не похоже на работу
Если я переехал everyfrom из University.cshtml в основной вид, кажется, что все работает нормально.
Любая помощь или предложение оценены.
Возможно, это не связано, но не пытайтесь переопределить атрибут 'value' - установите значение' TotalDegrees' в контроллере, прежде чем отправить модель в представление. И не используйте 'x => Model' (capital M), который может привести к исключениям в зависимости от другого кода в вашем представлении. –
Ваш последний« новый {EmployeeId = Model.EmployeeId} »в качестве дополнительных данных представления к шаблону, предлагающий использовать его где-то в шаблоне - разместите полный код шаблона редактора. И показать фактический html, сгенерированный вашим шаблоном, - это атрибут 'name'' name = "University.TotalDegrees" '? –
@StephenMuecke Я прохожу viewdata, но не использую его в данный момент. Да имя переводится в University.TotalDegrees и id to University_TotalDegrees – Malik