通过表单提交时,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; }
我遇到了模型绑定问题,我的 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; }