ASP ComplexType 的 MVC EditorTemplates

ASP MVC EditorTemplates for ComplexType

我是 Whosebug 的沉默者 reader,几乎在所有情况下,我都会从该网站的其他人 post 中找到解决我的问题的方法,直到昨天我卡在某事上并且不能'找不到解决办法。

以下是对我的应用程序架构的一些解释:

我在一个单独的 c# 项目中有代码优先的实体模型,我正在将它引用到我的 Web 项目中。我有以下实体:

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)})

在 Index.cshtml 上,当我点击提交按钮时,它 post 将 Employee 对象返回到服务器,但是

Employee.University.TotalDegrees 为空,即使用户填写了值

如果我从 University.cshtml 中删除 @Html.HiddenFor(model=>model.UniversityId)Employee.University 在 post 上变为 null。

我尝试使用 @Html.EditorFor(model=>model.TotalDegrees)@Html.TextBoxFor(model=>model.TotalDegrees),但其中 none 似乎有效

如果我将每个从 University.cshtml 移动到主视图,一切似乎都正常。

感谢任何帮助或建议。

你的问题是你写错了 lambda 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)})

废话!!!花了 16 个小时才确定是设计师给我的这个

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

所以除了我自己的表单之外,还有一个表单与 EditorTemplate 中的每个字段相关联,并且它没有将表单发布到任何地方:(

感谢斯蒂芬的帮助,很抱歉浪费了时间:)