Я не уверен, правильно ли я отправляю несколько неполных страниц из моего приложения ASP.NET MVC.Я не отправляю данные правильно?
На моем сайте загружается ряд частичных страниц и отображается их на вкладках пользовательского интерфейса jQuery. Вот пример того, как это выглядит в моем index.aspx страницы (надуманный пример):
<div id="tabScenario"><% Html.RenderPartial("Scenario", Model); %></div>
<div id="tabPerson"><% Html.RenderPartial("Person", Model.People.FirstOrDefault()); %></div>
<div id="tabAddress"><% Html.RenderPartial("Address", Model.People.FirstOrDefault().Addresses.FirstOrDefault()); %></div>
Мои частичные все строго типизированный к особой версии каждого из этих объектов (сценарий, человек, и адрес в этом случае).
Пользователь вводит данные, которые он хочет изменить, а затем сохраняет данные. Когда я отправляю эти данные, я делаю это в моем контроллере:
[HttpPost]
[Header("Setup Scenario")]
public ActionResult Index(Scenario scenario, Person person, Address address, string submitButton)
{
// Update the scenario with all the information that belongs to it.
scenario.Person = person;
scenario.Person.Address = address;
// Determine whether to just save or to save and submit.
switch (submitButton)
{
case "Save":
return Save(scenario, true);
case "Save As...":
return Save(scenario, false);
case "Submit":
return Submit(scenario);
default:
return View();
}
}
Я не совсем уверен, как правильно это происходит потому, что, когда я иду, чтобы отобразить информацию, которую я только что отправленный на следующей точку зрения, я получать следующее сообщение об ошибке во время выполнения на линии:
<div id="tabPerson"><% Html.RenderPartial("Person", Model.People.FirstOrDefault()); %></div>
Ошибка:
The model item passed into the dictionary is of type 'Mdt.ScenarioDBModels.Scenario', but this dictionary requires a model item of type 'Mdt.ScenarioDBModels.Person'.
что меня смущает то, что, если вы посмотрите на конкретной линии, я получаю Person. Итак, основываясь на этом сообщении, он говорит мне, что моя ценность скорее всего равна нулю, а ASP.NET «отступает» к объекту «Сценарий».
Из-за всего этого я решил, что делаю что-то неправильное в том, как я публикую все свои данные (их много), но я застрял в том, что бы это было.
Разъяснения
Я отправляю с помощью Ajax. Вот инструкция BeginForm.
<% using (Ajax.BeginForm("Index", "Scenario", new AjaxOptions { HttpMethod = "Post", OnSuccess = "scenarioSubmitSuccess" }, new { id = "scenarioForm" }))
{ %>
// My Index.aspx
<% } %>
Метод Save это, в основном, пытаясь сохранить модель в хранилище основы (базы данных в этом случае). Вот метод:
/// <summary>
/// Save a the scenario.
/// </summary>
/// <param name="scenario">The scenario to save to the database.</param>
/// <param name="overwrite">True if the existing scenario should be updated in the database.</param>
/// <returns></returns>
private ActionResult Save(Scenario scenario, bool overwrite)
{
if (ModelState.IsValid && TryUpdateModel(scenario, "Scenario"))
{
ScenarioDBEntities entities = ObjectContextFactory.GetScenarioDBEntities();
ScenarioRepository scenarioRepository = new ScenarioRepository(entities);
if (overwrite)
{
scenarioRepository.Update(scenario);
}
else
{
scenarioRepository.Add(scenario);
}
entities.SaveChanges();
}
return View(scenario);
}
Что вам нужно уточнить: как вы публикуете действие контроллера индекса (AJAX, форма, что-то еще)? Что такое действие «Сохранить»? Какую модель она передает? –
@Darin Dimitrov - Обновляется с информацией. – JasCav
@ Darin Dimitrov - я обновил сообщение, чтобы показать, как я создаю сценарий с помощью метода Action (после публикации). Все эти данные являются технически частью сценария ... просто имеет смысл разделить его с точки зрения данных, поскольку существует так много разных данных. (Мой пример немного надуманный - я не показываю все.) Когда я сохраняю, я сохраняю только сценарий (который теперь должен содержать всю информацию о данных). Это вообще помогает? – JasCav