【问题标题】:update modelobject in a controller更新控制器中的模型对象
【发布时间】:2026-01-09 09:10:01
【问题描述】:

我正在尝试在我的模型对象中更新用户

   public ActionResult AddJob(JobQueue job,HttpPostedFileBase file)
    {
       job.User = "itdev";

       TryUpdateModel(job) 

       if (ModelState.IsValid)//Always returns false
       {

       }
    }

型号

   public class JobQueue { 
   [Required] 
   [Display(Name="JobId")] 
   public string JobId { get; set; } 

   [Required] [Display(Name = "FileName")] 
   public string FileName { get; set; } 

   [Required] 
   [Display(Name = "Job Run Date")] 
   public DateTime JobRunDate { get; set; } 

   [Required] 
   [Display(Name = "Email")] 
   public string Mail { get; set; } 

   [Required] 
   [Display(Name = "User")] 
   public string User { get; set; }

我在分配值后尝试使用 TryUpdateModel(job) 和 UpdateModel(job)。这两个似乎都没有更新模型,因为 ModelState.IsValid 返回 false。有人可以指出正确的方向吗?我正在使用 MVC3

谢谢,

萨布

【问题讨论】:

  • User 的类型是字符串吗?如果不是,则分配的字符串将无效。 . .你能告诉我们你的用户类吗?
  • 是的,用户是 JobQueue 类中的一个字符串。这个想法是使用 User.Identity.Name 从控制器分配用户,但我目前正在对其进行硬编码以进行测试。
  • 下一步似乎是尝试 Gaz Winter 下面的建议并删除 TryUpdateModel(job),因为在这种情况下,它似乎没有必要。如果 ModelState.IsValid 说它无效,那么我们需要进一步调查。

标签: asp.net-mvc-3 c#-4.0 asp.net-mvc-controller


【解决方案1】:

我在这里可能错了,但我认为job.User = "itdev"; 应该足以更新模型而不使用TryUpdateModel(job) 无论如何我们在我们的网站上就是这样做的。我从来不需要使用任何方法来实际更新模型本身。只需手动分配值。

这取决于我猜你的模型是如何设置的。

您可能应该发布模型的代码,以防我的回答没有帮助。

【讨论】:

  • 是的,我会这么认为。分配值后,作业对象确实包含这些值,但 ModelState.IsValid 返回 false。
  • 我的模型类中的用户字符串是 [Required] [Display(Name = "User")] public string User { get;放; }
  • 调试时,所有模型字段都填充了吗?如果有任何遗漏,那将导致它无效!
  • 当调试器点击第一行时,未填充所需的数据用户。我手动分配值 job.User = "itdev";在此之后作业对象包含所需的值。我可以绕过通过执行 ModelState["User"].Errors.Clear();但不确定这是否是正确的方法。
  • 如果您总是要在控制器内部而不是从网页中分配值。我不确定您是否需要必填字段。所以你可以一起删除。
最近更新 更多