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 中的每个字段相关联,并且它没有将表单发布到任何地方:(
感谢斯蒂芬的帮助,很抱歉浪费了时间:)
我是 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 中的每个字段相关联,并且它没有将表单发布到任何地方:(
感谢斯蒂芬的帮助,很抱歉浪费了时间:)