我正在开发我的第一个MVC3项目。我正在使用linq来sql。我在数据库中有一个名为“Tutorial”的表。我用linq来sql designer生成dbml文件。然后为valiation创建好友类。
namespace Tut.DomainModel.Entities
{
[MetadataType(typeof(TutorialMetadata))]
public partial class Tutorial
{
public sealed class TutorialMetadata
{
[HiddenInput(DisplayValue = false)]
public int TutorialID { get; set; }
[Required(ErrorMessage = "Title is required")]
[StringLength(250, MinimumLength = 10, ErrorMessage = "Title must be between 10 and 250 characters")]
public string Name { get; set; }
[HiddenInput(DisplayValue = false)]
public DateTime PostDate { get; set; }
}
}
}
在我的TutorialsController.cs文件中,我有2个动作。一个是“列表”,另一个是“帖子”。
public ViewResult List()
{
return View(reposi.Tutorials.ToList());
}
public ViewResult Post()
{
return View();
}
[HttpPost]
public ActionResult Post(Tutorial tutorial)
{
if (ModelState.IsValid)
{
reposi.Add(tutorial);
reposi.Save();
return RedirectToAction("List");
}
else
{
return View();
}
}
我将“PostDate”标记为隐藏字段,因为在创建新帖子时我不需要显示它。我只是为它分配当前日期。
但是在我的列表页面上,我确实希望显示发布日期,但是它没有显示,因为它在模型类中标注了“HiddenInput”
答案 0 :(得分:0)
我该如何解决?
为每个视图使用不同的视图模型。因此,如果在view1中您需要隐藏字段,则可以为其设计视图模型,并使用HiddenInput属性修饰属性。如果view2需要显示值,则为它设计一个不具有此属性的不同视图模型。
结论:您应该始终为每个视图创建一个视图模型。视图模型与给定视图的要求紧密耦合,需求从视图变为视图=>不同的视图模型。
最糟糕的错误是尝试在不同的视图中重用相同的视图模型。它会导致您遇到的问题和问题。