Atualmente, estou tendo problemas para salvar os Enum
valores em meu banco de dados porque não estou mapeando corretamente de meu ViewModel
para meu Model
e vice-versa. O problema reside quando tento Edit
um existente Delivery
. Consegue o status
, mas quando tento save
, não save
o novo status
.
Esta linha delivery.status = model.Status;
não funciona e não sei se devo configurar Enum
no ViewModel
também.
Estou bastante perplexo porque não tenho ideia de como fazer isso. Eu ainda sou um iniciante e estou tentando entender esse desenvolvimento, alguém pode sugerir uma solução ou me apontar na direção certa?
Ver modelo:
public enum Status
{
Dispatched, Delayed, Delivered
}
public class DeliveryVM
{
public int? ID { get; set; }
public int DriverID { get; set; }
public Status Status { get; set; }
}
Controlador:
public ActionResult Edit(int? id)
{
....
Delivery delivery = db.Deliverys.Find(id);
// Initialize the view model
DeliveryVM model = new DeliveryVM()
{
ID = delivery.DeliveryID,
DriverID = delivery.DriverID,
Status = model.Status; // this doesn't work
};
return View(model);
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit(DeliveryVM model)
{
// Get the data model based on the ID of the view model
Delivery delivery = db.Deliverys.Find(model.ID);
// Map the view model properties to the data model
delivery.DriverID = model.DriverID;
delivery.status = model.Status; // this doesn't work
// Mark as modified and save
....
return RedirectToAction("Details", new { id = delivery.DeliveryID });
}
Modelo:
public enum Status
{
Dispatched, Delayed, Delivered
}
public class Delivery
{
public int DeliveryID { get; set; }
[Display(Name = "Driver")]
public int DriverID { get; set; }
public Status Status { get; set; }
}
Ver código:
<div class="form-group">
@Html.LabelFor(model => model.Status, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EnumDropDownListFor(model => model.Status, htmlAttributes: new { @class = "form-control", @id="dropdown" })
@Html.ValidationMessageFor(model => model.Status, "", new { @class = "text-danger" })
</div>
</div>
Este é o erro que recebo nesta linha delivery.status = model.Status;
:
Você declarou 2 separados enums
para Status
, um na montagem para seu modelo de dados e um na montagem para seu modelo de vista. Eles são tipos diferentes e não podem ser convertidos de um para o outro. Você pode fazer com que o modelo de visualização se refira ao enum Status
na montagem do modelo de dados, ou você pode mapear entre eles usando o Enum.TryParse()
método, por exemplo, para mapear do modelo de dados para o modelo de visualização no método GET
HealthHabitat.ViewModels.Status status = HealthHabitat.ViewModels.Status.Dispatched;
Enum.TryParse(delivery.Status.ToString(), out status);
DeliveryVM model = new DeliveryVM()
{
ID = delivery.DeliveryID,
DriverID = delivery.DriverID,
Status = status;
};
e então no método POST, faça ao contrário
HealthHabitat.Models.Status status = HealthHabitat.Models.Status.Dispatched;
Enum.TryParse(model.Status.ToString(), out status);
delivery.Status = status;
Este artigo é coletado da Internet.
Se houver alguma infração, entre em [email protected] Delete.
deixe-me dizer algumas palavras