型號

2011-04-10 55 views
1

我有不發送CreatedOn和CreatedBy回HttpPost創建操作創建操作。型號

這些都不是用戶定義的屬性和理想我不想讓他們在表單上顯示的。那麼,如何將這些屬性放入模型中,而不必將它們放在窗體上呢?他們是否應該隱藏在表單上?

的控制器

public virtual ActionResult Create() 
    { 
     var meeting = new Meeting 
     { 
      CreatedOn = DateTime.Now, 
      CreatedBy = User.Identity.Name, 
      StartDate = DateTime.Now.AddMinutes(5), 
      EndDate = DateTime.Now.AddHours(3) 
     }; 

     ViewBag.Title = "Create Meeting"; 
     return View(meeting); 
    } 



    [HttpPost] 
    public virtual ActionResult Create(Meeting meeting) 
    { 
     if (ModelState.IsValid) 
     { 

      _meetingRepository.InsertOrUpdate(meeting); 
      _meetingRepository.Save(); 
      return RedirectToAction(MVC.Meetings.Details(meeting.MeetingId)); 
     } else { 

      return View(); 
     } 
    } 

回答

2

他們應該被隱藏了窗體上的字段?

是的,這絕對是一個不錯的傳球它們的方式。請注意,這是不安全的,因爲用戶可以僞造一個POST請求並對其進行修改,但在您的方案中可以確定。

所以如果你需要安全的另一個方法是從數據存儲重新獲取它們的所以他們並沒有改變用戶無法修改它們以這種形式。

+0

我會盡量隱藏字段的路線。我是否正確地考慮如果我禁用了隱藏文本框,那麼它們會被傳回控制器,還是會被忽略? – MrBliz 2011-04-10 14:04:40

+2

@ Doozer1979,'disabled' =>沒有通過所有,'readonly' =>通過,但不能由用戶修改。但是因爲這是一個隱藏的領域,所以不要打擾任何「禁用」或「只讀」。 – 2011-04-10 14:05:29