2
我有一个模型,其中有多个列表,我可以在我的视图中显示列表中的所有信息,但是当我将它发回时,所有列表都是空值。我的模型如下(简洁起见)。MVC3模型不从一个表单发回列表<CustomObject>
public class PartDetail
{
public string DateCreated { get; set; }
[StringLength(255, MinimumLength = 3)]
public string Description { get; set; }
public Guid ID { get; set; }
public string IsActive { get; set; }
public string Manufacturer { get; set; }
public IEnumerable<SelectListItem> Manufacturers { get; set; }
[StringLength(100, MinimumLength = 3)]
public string Name { get; set; }
public string PartType { get; set; }
[Required]
[StringLength(100, MinimumLength = 3)]
public string SerialNumber { get; set; }
public List<DateAttribute> DateAttributes { get; set; }
public List<PointAttribute> PointAttributes { get; set; }
public List<TextAttribute> TextAttributes { get; set; }
public List<NumericAttribute> NumericAttributes { get; set; }
public List<LookupAttribute> LookupAttributes { get; set; }
public List<UtilizedPartAttribute> PartAttributes { get; set; }
public List<MapAttribute> MapAttributes { get; set; }
}
我的帖子控制器是
[HttpPost]
public virtual PartialViewResult UpdatePart(PartDetail part)
{
part.Update();
return PartList(part.PartType);
}
而我的观点是(缩短为简洁起见)
@using RIS.Models.PartModels
@model PartDetail
@using (Ajax.BeginForm("UpdatePart", "Part", null, new AjaxOptions { UpdateTargetId = "update_panel" }))
{
<h3>Part: @Model.SerialNumber</h3>
<p class="row">
<label class="span2"> Name:</label>
<strong class="span8">
@Html.EditorFor(model => model.Name)
@Html.ValidationMessageFor(model => model.Name)
</strong>
</p>
....more boilerplate code....
<h3>Attributes</h3>
foreach (var date in Model.DateAttributes)
{
if (date.IsActive)
{
<div class="row inline-inputs">
<label class="span5">@date.DisplayName:</label>
@Html.TextBoxFor(model => date.Value, new { @class = "mini" })
@Html.ValidationMessageFor(model => date.Value)
</div>
}
}
...more boilerplate code that is very similar to the above for the different lists
<p>
<input type="submit" class="btn primary" value="Save Part"/>
</p>
@Html.HiddenFor(model => model.ID)
@Html.HiddenFor(model => model.Manufacturer)
@Html.HiddenFor(model => model.DateCreated)
@Html.HiddenFor(model => model.Manufacturer)
@Html.HiddenFor(model => model.IsActive)
@Html.HiddenFor(model => model.PartType)
}
你在做任何模型绑定? –
我不完全确定你指的是什么样的模型绑定。 – PlTaylor
您可以重写MVC通过编写自定义联编程序来判断您传递的内容的方式。你只需要创建一个实现'DefaultModelBinder'的类。如果你有足够的时间,这是一件好事,因为最终你会遇到一个模型,只是没有帮助而无法通过 –