2017-10-06 38 views
2

我是MVC的新手,最近4年來一直使用網絡表單,但最近轉移到MVC,我發現它完全不同。爲什麼控制器需要一個模型的參數,如果它強烈地綁定到視圖?

我創建了一個名爲basicoperations.cs庫剛剛包含InsertMethod與布爾返回類型。然後一個模型,它包含兩個屬性名稱,密碼,然後一個控制器它包含一個單一的行動結果方法,並強烈綁定到一個視圖。

當我填充前端的2個文本框,然後將其提交給數據庫。精細。我理解,但我覺得困惑的是:

public ActionResult AddStories2(Stories st) 
     { 

      Stories s2 = new Stories(); 
      basicoperations bo = new basicoperations(); 

      if (bo.insertImages(st)) 
      { 
       ViewBag.Message = "Added"; 
      } 
      else 
      { 
       ViewBag.Message = "Failed"; 
      } 

      return View("AddStories"); 
     } 

如果視圖強烈綁定到模型,然後 1.爲什麼我仍然需要一個案例對象作爲參數? 2.爲什麼對象故事s2包含null,因爲它是綁定的?

+1

你創建's2',但你沒有在任何地方使用它。你確實不需要它。你在問爲什麼你需要AddStories2 action方法中的參數'Stories s1'?如果您沒有參數,那麼您如何知道來自視圖的數據類型,以及如何在那裏應用您的邏輯? –

+0

視圖並不明顯與控制器通信我猜。由於視圖可以直接與模型進行通信。 –

回答

2

我真的不明白你的問題。一步一步說明:

  1. 這是一個在提交表單時從視圖中調用的操作方法。如果你的視圖有兩個字段名稱和密碼,我想你的模型故事是這樣的(我猜你是在談論兩種形式,因爲你的登錄模型不叫故事,但與我的信息,我想澄清一些事情):

    public class Stories 
    { 
        public string name { get; set; } 
        public string password { get; set; } 
    } 
    
  2. 如果您的帖子被正確提交,則對象Stories st應該具有用戶的輸入值。

  3. 對象故事s2在您的動作中被實例化並且值永遠不會被賦予該對象。類似的東西:

    s2.name = "something"; 
    s2.password = "somethingElse" 
    

所以它應該清楚它爲什麼是空的。否則,那麼你可以像對象:

Stories s2 = new Stories(){ name = "something", password = "somethingElse"} 
  • 既然你回到你並不需要一個模型或任何值,你只能用它返回一個視圖中查看Viewbag值不需要使用對象Stories作爲參數。如果您的視圖「AddStories」中,然後開始使用此模式類似這樣的

    @model Stories 
    
  • 你必須通過一個模型。但是,如果您實際上沒有使用模型的任何值,則只需從視圖中刪除此行。

    相關問題