Si esatto perchè il mio desiderio era che l'utente all'atto della creazione di un ticket producesse sia l'intestazione del ticket che la prima reply.
Ho risolto in questo modo anche se non so se può andare bene.
codice:
public ActionResult Create()
{
//Qui valorizzo la ViewBag per essere disponibili nella View
List<Project> listProject = db.Projects.ToList();
listProject.Insert(0, new Project { Id = 0, Name = "" });
ViewBag.listProject = new SelectList(listProject, "Id", "Name");
//ViewBag.Reply = new Reply();
return View();
}
Volevo inzialmente mettere un oggetto reply nella view bag ma non sapevo come accedere al campo Text percui l'ho creato a mano
View :
codice:
<div class="form-group">
@Html.Label("Testo", htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.Editor("Text", new { htmlAttributes = new { @class = "form-control" } })
</div>
</div>
Infine nel mio controller con httppost
codice:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "Id,Project_Id,Object")] Ticket ticket, [Bind(Include = "Text")] Reply reply)
{
Non so che dire.
Ho sentito pareri che mi dicevano di creare un model specifico tipo
codice:
public class TicketCreationViewModel {
[Required]
[DisplayName("Oggetto")]
public string Subject { get; set; } //L'"oggetto" in inglese si dice "Subject"
[Required]
[DisplayName("Testo")]
public string Text { get; set; }
}
Ed un controller adeguato
codice:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(TicketCreationViewModel model)
{
//Validazione, per prima cosa
if (!ModelState.IsValid) {
return View(model);
}
//Creo un nuovo ticket e ci copio i dati del model
var ticket = new Ticket {
Subject = model.Subject
};
//Aggiungo la prima reply al ticket
var reply = new Reply {
Text = model.Text
};
ticket.Replies = new List<Reply> { reply };
//TODO: qui salvi il nuovo ticket e reindirizzi l'utente
}
Però sono riuscito a modificando il controller creato tramite lo scaffolding a far tornare tutto.
Unica cosa che nella view mi piacerebbe passare oggetto reply e crearle il campo text come ho creato object ma non so quale delle strade è meglio se quella che ho fatto, quella suggerita o altre.
Di fatto su queste cose non c'è molta documentazione, consigli, esempi in giro.