通过表单提交时,Sitecore.Data.ID 类型的模型绑定无法正常工作

Model binding not working properly for Sitecore.Data.ID type while submitting through a Form

我遇到了模型绑定问题,我的 ID 类型为 Sitecore.Data.ID。提交表单后,所有其他字段都与正确的数据绑定,但是我的 ID 被更改为其他内容。

比如表单中隐藏字段'id'的值为2fb3169c-8b3f-4618-ac78-6170fd0eb297,提交到CartController后,该值为{{68CE2980-7611-422B-96E1-29C4CC0132D5}}{{82F7914C-34D6-4009-B301-53C1499774A3}}什么的否则。

我认为它是随机的。我不确定哪里出错了。

我有这样一个模型:

 [SitecoreType(AutoMap = true,Cachable = true)]
 public class Book : Item
 {
     public virtual ID Id { get; set; }

     [SitecoreField(IsRequired = true)]
     public virtual string Name { get; set; }

     [SitecoreField(IsRequired = true)]
     public virtual double Price { get; set; }

     [SitecoreField(IsRequired = true)]
     [StringLength(50, MinimumLength = 5)]
     public virtual string Description { get; set; }
 }

这是我的观点:

    @model Book
          using (Html.BeginRouteForm(Sitecore.Mvc.Configuration.MvcSettings.SitecoreRouteName, FormMethod.Post)

)
        {
            @Html.Sitecore().FormHandler("Cart", "Index")


                @Html.HiddenFor(x => Model.Id)

            <div>
                @Html.DisplayFor(x => book.Name)
                @Html.EditorFor(x => book.Name, new { @class = "bold" })  

            </div>
            <div>
                @Html.DisplayFor(x => book.Price)
                @Html.EditorFor(x => book.Price, new { @class = "bold" })  

            </div>
            <div>
                @Html.DisplayFor(x => book.Description)
                @Html.EditorFor(x => book.Description, new { @class = "bold" })  

            </div>
             <input type="submit" />
            }

这是购物车控制器:

 public class CartController : GlassController
 {
      [HttpPost]
      public ActionResult Index(Book book)
      {
          string id = book.Id.ToString();
          if (!string.IsNullOrEmpty(id))
          {
              book = SitecoreContext.GetItem<Book>(new Guid(id), false, true);
              return PartialView("~/Views/Cart/details.cshtml", book);
          }
          return Redirect("http://google.com");
      }
  }        

Id 表示玻璃映射器中的项目 ID。所以,而不是使用

public virtual ID Id { get; set; }

改成这个:

[SitecoreId] 
public virtual Guid Id { get; set; }