Я создаю сайт, на котором я использую частичные представления для отображения различных фрагментов данных об одной модели.Вот немного HTML.(Обратите внимание, что все они содержатся в одной форме, и страница Index, на которой отображаются эти частичные данные, строго типизирована для главной модели. Основная модель содержит различные списки данных.)
<div id="tab1"><% Html.RenderPartial("Tab1", Model); %></div>
<div id="tab2"><% Html.RenderPartial("Tab2", Model.AnItemList1.FirstOrDefault<AnItemList1>()); %></div>
<div id="tab3"><% Html.RenderPartial("Tab3", Model.AnItemList2.FirstOrDefault()); %></div>
Здесьэто ОДИН из заголовков частичных представлений (для 'tab2'):
<%@ Language="C#" Inherits="System.Web.Mvc.ViewUserControl<AnItem1>" %>
Страницы отображаются правильно.Проблема заключается в том, что, когда я вводю данные в различные части частичных страниц, а затем отправляю всю форму (через POST), данные не возвращаются обратно в мое хранилище данных (MSSQL) - но это происходит только для любого изэлементы списка (которые содержатся в модели).Первая частичная страница правильно имеет свои данные в хранилище данных.
Что я здесь не так делаю?Должен ли я только передать модель в Html.RenderPartial, а затем получить нужную модель на неполной странице?Должен ли я пройти весь список, а затем получить первый (прямо сейчас, я забочусь только о первом элементе в списке - который изменится ВСЕГДА, но не в ближайшее время).
Предложения или мысли приветствуются.
Обновление : Вот как я получаю доступ к свойствам в частичных представлениях.
<div class="data-group">
<%: Html.CheckBoxFor(model => model.Property1) %>
<%: Html.LabelFor(model => model.Property1) %>
</div>
Обновление 2 : По запросу ...
Действие контроллера (ScenarioController):
public ActionResult Index(int id = 0)
{
if (id == 0)
{
SavedScenario scenario = new SavedScenario();
scenario.AnItemList1.Add(new AnItem1());
scenario.AnItemList2.Add(new AnItem2());
return View("Index", scenario);
}
else
{
SavedScenario scenario = repository.GetScenario(id);
if (scenario == null)
return View("NotFound");
else
return View("Index", scenario);
}
}
[HttpPost]
public ActionResult Index(SavedScenario scenario)
{
if (ModelState.IsValid && TryUpdateModel(scenario, "SaveScenario"))
{
repository.Add(scenario);
repository.Save();
}
return View(scenario);
}
Визуализированный HTML (я могу включать только его части - это небольшой пример того, что находится в форме):
<form action="/Scenario" id="form0" method="post">
<!-- This is the one that works - the basic Scenario. Top level. -->
<fieldset>
<legend>Scenario Information</legend>
<div class="data-group">
<div class="editor-label">
<label for="ScenarioName">Scenario Name</label>
</div>
<div class="option1">
<input class="wide" id="ScenarioName" name="ScenarioName" type="text" value="" />
</div>
<div class="validation">
<div><span class="field-validation-valid" id="ScenarioName_validationMessage"></span></div>
</div>
</div>
</fieldset>
<!-- This does not work or get submitted (as far as I can tell). -->
<div id="tab2">
<fieldset>
<legend>Tab2</legend>
<div class="data-group">
<input id="Property1" name="Property1" type="checkbox" value="true" /><input name="Property1" type="hidden" value="false" />
<label for="Property1" />
</div>
</div>
</fieldset>
</form>
Приношу свои извинения за то, что я держу это в общих чертах.