我遇到了模型绑定问题,我的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");
}
}
答案 0 :(得分:2)
Id表示玻璃映射器中的项目ID。所以,而不是使用
public virtual ID Id { get; set; }
将其更改为:
[SitecoreId]
public virtual Guid Id { get; set; }