Я боролся с проектом уже пару дней, и в моей текущей итерации я решил использовать шаблон редактора.ASP MVC3 - Редактор Шаблон, возвращающий нулевые значения контроллеру в пост.
Оригинальная проблема возникла из основной таблицы, связанной со вторичной таблицей с помощью внешнего ключа в SQL. В ASP MVC, вторичная таблица представлена со следующим полем:
[UIHint("BankListAgentId")]
public virtual ICollection<BankListAgentId> BankListAgentId { get; set; }
Поскольку это объект коллекции, GET
на странице «Edit» работает для каждого конкретного пункта, однако на всех коллекциях POSTBACK
предметы неожиданно нулевые. Однако все остальные поля содержат правильные данные. Я пытаюсь использовать и редактор шаблона, однако элементы коллекции все еще возвращаются null
.
Вот код, я использую в представлении
@model Monet.Models.BankListMaster
@using (Html.BeginForm())
{
<fieldset>
<legend>Stat(s) Fixed</legend>
<table id="fixedRows">
<tr>
<th>State Code</th>
<th>Agent ID</th>
<th></th>
</tr>
@foreach (var item in Model.BankListAgentId)
{
if (!String.IsNullOrWhiteSpace(item.AgentId) && item.FixedOrVariable.Equals("Fixed"))
{
@Html.EditorFor(model => item)
}
}
</table>
<br />
@Html.ActionLink("Add another", "BlankFixedRow", null, null, new { id = "addFixed" })
</fieldset>
}
А вот шаблон редактора. Это имя BankListAgentId
и сидит в папке с именем EditorTemplates
в папке Views
@model Monet.Models.BankListAgentId
<tr id="[email protected]">
<td>
@Html.DropDownListFor(model => model.StateCode,
(SelectList)ViewBag.StateCodeList, Model.StateCode)
</td>
<td>
@Html.EditorFor(model => model.AgentId)
@Html.ValidationMessageFor(model => model.AgentId)
</td>
<td>
<a href="#" class="deleteRow">delete</a>
</td>
@*<td><a href="#" onclick="$('#[email protected]').parent().remove();" style="float:right;">Delete</a></td>*@
</tr>
Вот код из BankListMaster
модели
public partial class BankListMaster
{
public BankListMaster()
{
this.BankListStateCode = new HashSet<BankListStateCode>();
this.BankListAgentId = new HashSet<BankListAgentId>();
this.BankListAttachments = new HashSet<BankListAttachments>();
}
public int ID { get; set; }
public string BankName { get; set; }
public virtual ICollection<BankListStateCode> BankListStateCode { get; set; }
public virtual ICollection<BankListAttachments> BankListAttachments { get; set; }
[UIHint("BankListAgentId")]
public virtual ICollection<BankListAgentId> BankListAgentId { get; set; }
}
И, наконец, вот BankListAgentId
модель
public partial class BankListAgentId
{
public string AgentId { get; set; }
public int ID { get; set; }
public string FixedOrVariable { get; set; }
public string StateCode { get; set; }
public virtual BankListMaster BankListMaster { get; set; }
}
EDIT
Пользователь должен будет иметь возможность динамически изменять список.
индекс для ICollection? Это нарушит время выполнения. –
Хорошее место, Дейв. Благодарю. –
Я не думаю, что IEnumerable может индексировать. Придется использовать IList. Единственная потенциальная проблема заключается в том, что NealR необходимо использовать foreach. –