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

时间:2017-03-14 12:24:32

标签: asp.net-mvc sitecore sitecore8 sitecore-mvc glass-mapper

我遇到了模型绑定问题,我的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");
      }
  }        

1 个答案:

答案 0 :(得分:2)

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

public virtual ID Id { get; set; }

将其更改为:

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