如何显示标记为“Hiddeninput”的属性

时间:2011-07-14 17:36:30

标签: asp.net-mvc asp.net-mvc-3

我正在开发我的第一个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”

1 个答案:

答案 0 :(得分:0)

  

我该如何解决?

为每个视图使用不同的视图模型。因此,如果在view1中您需要隐藏字段,则可以为其设计视图模型,并使用HiddenInput属性修饰属性。如果view2需要显示值,则为它设计一个不具有此属性的不同视图模型。

结论:您应该始终为每个视图创建一个视图模型。视图模型与给定视图的要求紧密耦合,需求从视图变为视图=>不同的视图模型。

最糟糕的错误是尝试在不同的视图中重用相同的视图模型。它会导致您遇到的问题和问题。