Модель MVC3 не публикует список <CustomObject>обратно из формы - PullRequest
2 голосов
/ 20 января 2012

У меня есть модель с несколькими списками, и я могу отображать всю информацию в моих списках в своем представлении, но когда я публикую ее обратно, все мои списки будут нулевыми. Моя модель выглядит следующим образом (для краткости упрощена).

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)

}

1 Ответ

5 голосов
/ 20 января 2012

Использование Для цикла вместо foreach, в этом случае механизм связывания модели может различать поля и восстанавливать значения для списков, подобных этому Html.TextboxFor (model => model.DateAttributes [i])

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...