Ситуация: В някакъв софтуер за управление на проекти, написан на asp.net, имам страница за създаване на проект (работи добре). Трябва да добавя към това възможността за добавяне на задачи от списък с шаблони към това предварително създаване на проект, НО списъкът с налични задачи зависи от някои стойности, намиращи се във формуляра за създаване.
Моето абстрактно решение е следното:
- Имам изглед „Създаване“ и изглед „Добавяне на задачи“ – и двата строго въведени към съставен viewModel, дефиниран в контролера
- Моят метод Create проверява кой бутон е бил използван за извикването му - ако бутонът е бил „Добавяне на задачи“, той рендира изгледа AddTasks, предавайки модела от изгледа за създаване, отново в същия контролер.
- Изгледът AddTasks публикува в изгледа Създаване с един от двата бутона, единият зарежда изгледа, а другият причинява действително запазване на DB.
Моят проблем е следният:
- Различните изгледи използват различни свойства на един и същ модел, но при предаването на този модел между тях данните се нулират (при всички случаи презареждане или запазване).
- Предполагам, че това се случва от автоматично обвързване на данни - въпреки че мислех, че полетата, които не присъстват във формуляра, няма да презапишат съществуващите данни на модела, предадени.
- Едва ли има някакъв код в контролера, който манипулира модела в момента - той се предава само от изглед на изглед в тези случаи.
Това е кодът на контролера:
// POST: /Project/Create/<viewModel>
[Authorize, AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create([Bind(Exclude = "Id,id")] ProjectViewModel model)
{
if (model.SubmitValue == "Create")
{
try
{
model.Project.Id = Guid.NewGuid();
model.Save(this.User.Identity.Name);
return this.RedirectToAction("Details", new {id = model.Project.Id});
}
catch (Exception e)
{
this.ModelState.AddModelError(e.ToString(), e.ToString());
}
return View(model);
}
if(model.SubmitValue == "AddTasks")
{
return this.View("AddTasks",model);
}
return this.View(model);
}
//POST: /Project/AddTasks/ + model
[Authorize, AcceptVerbs(HttpVerbs.Post)]
public ActionResult AddTasks([Bind(Include = SelectedCarrierTasks")]ProjectViewModel model)
{
return View(model);
}
Въпросът е: Как да поддържам състоянието на модела в тези изгледи, докато най-накрая го запише?
Бих предпочел да избягвам всякакви хакерски (TempData) или зависими от JS решения, но не съм затворен за тях, ако наистина са най-доброто решение.
Благодаря, Адам Толи