ASP.NET MVC 응용 프로그램에서 여러 부분 페이지를 올바르게 게시하고 있는지 확실하지 않습니다.데이터를 올바르게 게시하지 않습니까?
내 사이트에서 많은 부분 페이지를로드하여 jQuery UI 탭에 표시합니다. 여기에 내 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'.
당신이 특정 라인에서 보면, 내가 사람을 얻고 있다는 것이다. 그래서,이 게시물을 기반으로, 그것은 내 값이 가장 가능성이 높습니다 그리고 ASP.NET "시나리오"개체로 "떨어지고있다".
이 모든 것 때문에 모든 데이터를 게시하는 방법이 올바르지 않다고 생각했지만 (그 중 많은 부분이 있음) 나는 그렇게 될 것입니다.
따라 정정
내가 아약스를 통해 게시하고있다. 다음은 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, 폼, 다른 뭔가)에 게시하고 있습니까? 'Save' 액션은 무엇을하고 있습니까? 보기에 어떤 모델이 전달됩니까? –
@Darin Dimitrov - 정보로 업데이트되었습니다. – JasCav
@Darin Dimitrov - 게시물 작성 후 Action 메서드를 통해 시나리오를 작성하는 방법을 보여주기 위해 내 게시물을 업데이트했습니다. 모든 데이터는 기술적으로 시나리오의 일부입니다. 데이터가 너무 많아 데이터 관점에서 데이터를 분리하는 것이 합리적입니다. (예를 들어 약간 인위적으로 - 모든 것을 보여주지는 않습니다.) 내가 저장하면 지금은 모든 데이터 정보를 포함해야하는 시나리오 만 저장합니다. 그게 전혀 도움이 되나요? – JasCav