チケットを作成しようとすると、チケットの優先度も低くなります。 Priorityのドロップダウンリストをセットアップしましたが、チケットの優先順位の割り当ては機能していないようです。私はそれが私の見解はViewModelsからMVCへの列挙体のバインド
チケット\ Create.cshtmlを\に関係してい疑ってる私はこれを正しくやっているかどうかを確認するために、いくつかの明確化が必要:
を私は私のモデルでは、両方の
が必要です私はチケットと呼ばれるクラスを持っており、それが
public enum Priority
{
Low, Med, High
}
public class Ticket
{
....
}
Configuration.cs(チケットデータを挿入するためのスニペット)
var tickets = new List<Ticket>
{
new Ticket {
UserID = users.Single(s => s.LastName == "Wan").UserID,
CategoryID = categories.Single(c => c.CategoryName == "Con-X").CategoryID,
Issue = ("Con-X Login Error"),
Priority = Priority.High
},
new Ticket {
UserID = users.Single(s => s.LastName == "Wan").UserID,
CategoryID = categories.Single(c => c.CategoryName == "Desktop").CategoryID,
Issue = ("Can't remote access C0123"),
Priority = Priority.Med
},
};
列挙型の優先順位を持っています
私のviewmodelでTicketVM私はまた、優先度の列挙型を設定しました。 私はこれを通じて、私のチケットを設定していますので:
Ticket ticket = new Ticket
{
UserID = (int)WebSecurity.CurrentUserId,
Issue = model.Issue,
IssuedTo = model.IssuedTo,
CategoryID = model.CategoryID,
Priority = model.priority <-- ERROR
};
エラー:
Cannot implicitly convert type 'RecreationalServicesTicketingSystem.ViewModels.TicketVM.Priority' to 'RecreationalServicesTicketingSystem.Models.Priority'. An explicit conversion exists (are you missing a cast?) RecreationalServicesTicketingSystem
ビューが\チケット\ Create.cshtml
<div class="form-group">
@Html.DropDownListFor(m => m.priority, Model.PriorityList, "Please select the priority")
</div>
のviewmodels \ TicketVM.cs
public class TicketVM
{
public int UserID { get; set; }
[Required(ErrorMessage = "Please enter the description")]
public string Issue { get; set; }
[Display(Name = "Administrator")]
[Required(ErrorMessage = "Please select the Administrator")]
public int IssuedTo { get; set; }
public IEnumerable<SelectListItem> AdministratorList { get; set; }
public int CategoryID { get; set; }
public IEnumerable<SelectListItem> CategoryList { get; set; }
public enum Priority
{
LOW = 3,
MED = 2,
HIGH = 1,
}
public Priority priority { get; set; }
public IEnumerable<SelectListItem> PriorityList
{
get
{
var priorityType = typeof(Priority);
var priorityValues = Enum.GetValues(priorityType).Cast<Priority>();
var converter = TypeDescriptor.GetConverter(priorityType);
return
from priorityValue in priorityValues
select new SelectListItem
{
Text = converter.ConvertToString(priorityValue),
Value = priorityValue.ToString(),
};
}
}
}
Ti cketController.cs
public ActionResult Create()
{
TicketVM model = new TicketVM();
ConfigureViewModel(model);
return View(model);
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(TicketVM model)
{
if (!ModelState.IsValid)
{
model.CategoryList = new SelectList(db.Categories, "CategoryID", "CategoryName");
ConfigureViewModel(model);
return View(model);
}
Ticket ticket = new Ticket
{
UserID = (int)WebSecurity.CurrentUserId,
Issue = model.Issue,
IssuedTo = model.IssuedTo,
CategoryID = model.CategoryID,
Priority = model.priority <-- ERROR
};
db.Tickets.Add(ticket);
db.SaveChanges();
return RedirectToAction("Index");
}
private void ConfigureViewModel(TicketVM model)
{
IEnumerable<User> admins = db.Users.Where(u => u.IsAdministrator).OrderBy(u => u.LastName);
model.AdministratorList = admins.Select(a => new SelectListItem
{
Value = a.UserID.ToString(),
Text = string.Format("{0} {1}", a.FirstMidName, a.LastName)
});
IEnumerable<Category> categories = db.Categories.OrderBy(u => u.CategoryName);
model.CategoryList = categories.Select(a => new SelectListItem
{
Value = a.CategoryID.ToString(),
Text = a.CategoryName.ToString()
});
}
列挙型の変換を必要としないの行を一つだけ列挙型を定義し、あなたのコードでどこでもそれを使用することができますPOSTメソッドのコード:) –
完了!ありがとうございました! – TykiMikk