2015-08-14 2 views
0

Я - бесшумный читатель 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 в основной вид, кажется, что все работает нормально.

Любая помощь или предложение оценены.

+0

Возможно, это не связано, но не пытайтесь переопределить атрибут 'value' - установите значение' TotalDegrees' в контроллере, прежде чем отправить модель в представление. И не используйте 'x => Model' (capital M), который может привести к исключениям в зависимости от другого кода в вашем представлении. –

+0

Ваш последний« новый {EmployeeId = Model.EmployeeId} »в качестве дополнительных данных представления к шаблону, предлагающий использовать его где-то в шаблоне - разместите полный код шаблона редактора. И показать фактический html, сгенерированный вашим шаблоном, - это атрибут 'name'' name = "University.TotalDegrees" '? –

+0

@StephenMuecke Я прохожу viewdata, но не использую его в данный момент. Да имя переводится в University.TotalDegrees и id to University_TotalDegrees – Malik

ответ

0

Crap !!! провел 16 часов, чтобы определить, что дизайнер дал мне этот

   <form role='form'> 
       <div class="form-group"> 
       <input /> 
       </div> 
       </form> 

так, кроме моей собственной формы, была формой, связанная с каждым полем в EditorTemplate и отправляли форму не где :(

спасибо Стивена за вашу помощь и извините за потраченное время :)

0

Ваша проблема в том, что вы написали неправильный лямбда x => Model.TotalDegrees. Просто исправьте это:

@Html.TextBoxFor(x => x.TotalDegrees, new { @class="form-control", @min="5",@max="100",@type="number",@value=(Model.TotalDegrees.HasValue ? Model.TotalDegrees.Value : 5)}) 
Смежные вопросы