c# - 模型未绑定到 ViewModel ASP.Net MVC
问题描述
在我的控制器的 GET 编辑功能中,我将 id 作为参数并找到正确的模型。一切都按应有的方式填充。我想转身从这个模型生成一个 ViewModel,这样我就可以向它添加更多字段,但是一旦我用已经填充的模型创建了一个 ViewModel 的实例,一切都保持为空。
public ActionResult Edit(int? id)
{
var context = new PrincipalContext(ContextType.Domain);
var un = UserPrincipal.FindByIdentity(context, User.Identity.Name);
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
Ticket ticket = db.Tickets.Find(id);
var ticketViewModel = new TicketViewModel(ticket);
if (ticket == null)
{
return HttpNotFound();
}
List<TicketViewModel> TVM = new List<TicketViewModel>();
var tl = (from TU in db.Users
where TU.sAMAccountName == un.SamAccountName
join UD in db.Departments on TU.DepartmentID equals UD.Id
select new
{
TU.Id,
TU.sAMAccountName,
UD.Name,
TU.DepartmentID
}).ToList();
foreach(var listitem in tl)
{
ticketViewModel.UserID = listitem.Id;
//ticketViewModel.DepartmentName = listitem.Name;
//ticketViewModel.sAMAccountName = listitem.sAMAccountName;
ticketViewModel.DepartmentID = listitem.DepartmentID;
}
ViewBag.CategoryID = new SelectList(db.Categories, "Id", "CategoryName");
ViewBag.UserID = new SelectList(db.Users, "Id", "CanonicalName", ticket.UserID);
return View(ticketViewModel);
}
票务视图模型
public class TicketViewModel
{
public Ticket Ticket { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
public TicketViewModel(Ticket ticket)
{
this.NoteHistories = new HashSet<NoteHistory>();
Ticket = ticket;
}
public int Id { get; set; }
public string Title { get; set; }
public int CategoryID { get; set; }
public string Subcategory { get; set; }
public string Severity { get; set; }
public int UserID { get; set; }
public int DepartmentID { get; set; }
public string DepartmentName { get; set; }
public string sAMAccountName { get; set; }
public string Application { get; set; }
public int WorkstationID { get; set; }
public string Notes { get; set; }
public string Description { get; set; }
public System.DateTime Created_At { get; set; }
public System.DateTime Updated_At { get; set; }
public virtual Category Category { get; set; }
public virtual Department Department { get; set; }
public virtual User User { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<NoteHistory> NoteHistories { get; set; }
}
票种模型
解决方案
当然,它仍然是空的。您只在TicketViewModel
类中设置了三个变量。
在这里,您正在创建一个新实例TicketViewModel
并将其TicketModel
作为参数传递给构造函数:
var ticketViewModel = new TicketViewModel(ticket);
在构造函数中,您正在设置Ticket
变量:
Ticket = ticket;
在这里,您正在设置Id
、和Name
aAMAccountName
DepartmentID
ticketViewModel.UserID = listitem.Id;
//ticketViewModel.DepartmentName = listitem.Name;
//ticketViewModel.sAMAccountName = listitem.sAMAccountName;
ticketViewModel.DepartmentID = listitem.DepartmentID;
就是这样。你没有设置其他任何东西。
但是我确实注意到以上内容在 a 中foreach
,因此如果列表中有多个项目,它们将被覆盖。
推荐阅读
- ansible - ansible:如何从链接目录复制文件
- java - Dialogflow v2 Java 客户端库 detectIntent 与 Eclipse 上的 Spring Boot
- c# - .NET Core - 即使在启用 CORS 后也会出现 CORS 错误
- ftp - 如何将端点作为参数传递给 Ballerina 中的函数
- java - 使用 import 语句将实例成员(非静态成员)从一个类导入另一个类
- matlab - 如何在 MATLAB 中计算水平(或垂直)投影?
- python - 向现有模块方法手动添加回调的正确方法是什么?
- javascript - 多个听众与单亲是否存在计费或性能影响
- html - 使用 css 在一行中显示标签和输入
- arrays - 如果元素出现超过 n 次,则删除该元素的出现 - 我自己的代码