Я использую Linq to SQL в приложении ASP.NET MVC. Модель состоит из таблицы «Решения» с ссылкой внешнего ключа на таблицу «Параметры» (одно решение, множество параметров). Таким образом, модель позволяет мне получить доступ к коллекции опций через свойство Decision.Options. Я хочу, чтобы мои пользователи могли обновлять коллекцию параметров для решения в отдельном представлении от обновления других свойств решения. Каков наилучший способ передать коллекцию Options обратно в контроллер для обновления объекта Decision? Вот код:
Контроллер отправляет модель решения в представление Options:
//
// GET /Decisions/Options/5
[Authorize]
public ActionResult Options(int id)
{
Decision decision = decisionRepository.GetDecision(id);
return View(decision);
}
На странице моего просмотра просто перечислены поля имени параметра, которые пользователи могут изменять и отправлять:
<% using (Html.BeginForm())
{%>
<div id="answers">
<table>
<% int i = 0; %>
<% foreach (var item in Model.Options)
{ i += 1;
%>
<tr>
<td>
<label>Option #<%= i%>: </label>
<%= Html.TextBox("Option.Name", item.Name)%>
</td>
</tr>
<% } %>
</table>
<input type="submit" name="button" value="Back" />
<input type="submit" name="button" value="Next" />
</div>
<% } %>
Вот код контроллера для действия Options POST:
// POST /Decisions/Options/4
[AcceptVerbs(HttpVerbs.Post), Authorize]
public ActionResult Options(int id, string button, Decision d)
{
Decision decision = decisionRepository.GetDecision(id);
if (decision == null)
return View("NotFound");
if (button == "Back")
{
return RedirectToAction("Edit", new { id = decision.DecisionID });
}
//Update the options in the decision model
//TODO: What's the best way to update the Decision.Options parameter?
//Save options and move on to factors
UpdateModel(decision);
decisionRepository.Save();
return RedirectToAction("Factors", new { id = decision.DecisionID });
}
В действии POST для Options каков наилучший способ вернуть коллекцию элементов Option?
Я пытался работать с FormCollection напрямую, чтобы преобразовать его в EntitySet для присвоения Decision.Options перед вызовом метода Save. В приведенном выше коде передается объект Decision, но коллекция Options всегда равна нулю, поэтому мой комментарий TODO.
Я получил это, чтобы работать для непосредственного редактирования объекта Decision, но у меня проблемы с обновлением дочерней таблицы в модели с использованием Model Binder или FormCollection. Любая помощь с благодарностью!