Asp.net-Mvc

文章上的 Mvc 模型 id 0

  • August 5, 2021

我的模型有一個編輯頁面。當我將模型發布回我的控制器時,Id 屬性為 0。如何在發佈時維護 Id 屬性?

我正在發布要查看的模型,因此在獲取請求時設置了 Id 屬性。我的程式碼如下。

看法:

@model xandra.Models.ProjectModel

@using(Html.BeginForm())
{ 
   @Html.HiddenFor(m => m.Id) 
   @Html.LabelFor(m => m.Name)
   @Html.TextBoxFor(m => m.Name)

   <br />

   @Html.LabelFor(m => m.Description)
   @Html.TextAreaFor(m => m.Description)

   <br />

   @Html.LabelFor(m => m.Website)
   @Html.TextBoxFor(m => m.Website)

   <br />

   @Html.LabelFor(m => m.Active)
   @Html.CheckBoxFor(m => m.Active)

   <input type="submit" value="Save" />
}

控制器:

[Authorize]
[HttpGet]
[InitializeSimpleMembership]
public ActionResult EditProject(string id)
{
   using (var entity = new dixraContext())
   {
       var project = entity.Projects.FirstOrDefault(m => m.UrlName == id);


       return View(project);
   }
}

[Authorize]
[HttpPost]
[InitializeSimpleMembership]
public ActionResult EditProject(ProjectModel model)
{
   using (var entity = new dixraContext())
   {
       var project = entity.Projects.FirstOrDefault(m => m.Id == model.Id);

       project.Name = model.Name;
       project.Description = model.Description;
       project.Website = model.Website;
       project.Tags = model.Tags;
       project.Active = model.Active;

       entity.SaveChanges();

       return RedirectToAction("GetProject", project.UrlName);
   }
}

還有我的模特

public class ProjectModel
{
   [Key]
   [Required]
   public long Id { get; set; }

   [Required(AllowEmptyStrings=false)]
   public string Name { get; set; }

   [Required(AllowEmptyStrings=false)]
   public string Description { get; set; }

   [Required]
   public DateTime CreatedDate { get; set; }

   [Required]
   public int Creator { get; set; }

   public string Website { get; set; }

   [Required]
   public int CategoryId { get; set; }

   public virtual List<TagModel> Tags { get; set; }

   public string UrlName { get; set; }

   public bool Active { get; set; }
}

我以前見過這種情況,這可能是一個錯誤。我已經能夠通過不使用特定的視圖模板語法添加我需要包含在文章中的屬性來解決它。

而不是這個:

@Html.HiddenFor(m => m.Id)

使用這個

<input type="hidden" value="@Model.Id" name="Id"/> 

有同樣的問題。這是解決方案:在控制器類中的動作功能(已處理的發布數據)中添加行:

ModelState.Remove("Id");

如果您不這樣做,則您為模型中的 Id 屬性分配的任何值都將替換為來自 POST 請求的值。因此,如果不將其從 ModelState 中刪除,您在模型中的 Id 更改將無效。

引用自:https://stackoverflow.com/questions/25392045