【发布时间】:2014-04-26 02:55:30
【问题描述】:
我有两个模型如下
public class Category
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int ID { get; set; },
[Required]
public string category { get; set; }
[Required]
public string Desc { get; set; }
}
public class Product
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int ID { get; set; },
public int CatID { get; set; },
[ForeignKey("CatID")]
public virtual Category Category { get; set; },
[Required]
public string Desc { get; set; },
public string DisplayName
{
get
{
return string.format("{0} - {1}",this.Category.category,this.Desc);
}
}
}
这是我的编辑操作
public ActionResult Edit(int id)
{
ViewBag.PossibleCategories = categoryRepository.All;
return View(productRepository.Find(id));
}
[HttpPost]
public ActionResult Edit(Product product)
{
if (ModelState.IsValid) //<== This becomes false saying category.desc is required
{
productRepository.InsertOrUpdate(product);
productRepository.Save();
return RedirectToAction("Index");
}
else
{
ViewBag.PossibleCategories = categoryRepository.All;
return View();
}
}
我有一个产品的编辑视图,它将 ID 和 DisplayName 显示为只读。所有其他字段均可编辑。
编辑视图也有产品 -> 类别 -> 类别有一个只读文本字段
@Html.TextBoxFor(model => model.Category.category, new Dictionary<string, object>() { { "readonly", "true" } })
回邮发送此内容并尝试创建一个新类别。这不是必需的。类别链接将使用 product.CatID 结转。
如何显示这些类型的字段??
当编辑视图回发时,模型状态显示为无效,因为产品的类别的 desc 为空(产品 -> 类别 -> desc)。 如果我注释掉 Product 中的 DisplayName 属性,则不会发生此问题。
据我了解,这是因为 DiaplayName 属性指的是 Category 属性,而视图视图没有 category.desc 字段,因此在 POST 操作上重新创建模型时,不会填充 desc。将 category.desc 字段添加到视图是解决此问题的一种方法。 有没有其他方法可以解决这个问题?
注意:这不是我遇到此问题的唯一型号。有许多复杂的模型存在相同的问题,对我来说,将这些字段也包含在视图中会导致 (1) 视图非常混乱 (2) 往返的数据量会很高。
【问题讨论】:
-
如果你想看一下,我更新了我的答案。
-
感谢您的回答,不得不下线一天!
-
正如我在下面评论的那样,我误解了这个问题。我做了更正。再次@MiniRagnarok 抱歉混淆了。
标签: c# asp.net-mvc entity-framework