如果控制器强烈要查看,为什么控制器需要模型参数?

时间:2017-10-06 08:04:03

标签: c# asp.net-mvc c#-4.0

我是MVC的新手,过去4年一直在使用网络表单,但最近转到了MVC,我发现它完全不同。

我创建了一个名为 basicoperations.cs 的存储库,它只包含一个返回类型为 bool 的InsertMethod。然后是一个模型,其中包含2个属性名称,密码,然后是控制器,其中包含单个操作结果方法,并且强烈绑定到视图。

当我填充前端的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.为什么我仍然需要Stories对象作为参数? 2.为什么对象故事s2包含null,因为它受到约束?

1 个答案:

答案 0 :(得分:2)

我真的不明白你的问题。逐步澄清:

  1. 这是从您提到的表单提交时的视图调用的操作方法。如果你的视图有两个字段的名称和密码,我猜你的模型Stories就是这样的(我猜你正在谈论两种形式,因为你的登录模型不叫故事,但有了我所掌握的信息,我试图澄清一些事情):

    public class Stories
    {
        public string name { get; set; }
        public string password { get; set; }
    }
    
  2. 如果你的帖子被正确提交,那么对象Stories st应该具有用户的输入值。

  3. 对象Stories s2在您的操作中实例化,并且永远不会向对象赋值。这样的事情:

    s2.name = "something";
    s2.password = "somethingElse"
    
  4. 所以应该清楚为什么它是null。否则你可以像这样实例化对象:

    Stories s2 = new Stories(){ name = "something", password = "somethingElse"}
    
    1. 因为对于您返回的视图,您不需要模型或任何值,并且您只返回一个视图,其中包含您不必使用对象的Viewbag值作为参数。如果你的View" AddStories"正在使用这个模型

      @model Stories
      
    2. 在开始时你必须传递一个模型。但是,如果您实际上没有像您所暗示的那样使用模型的任何值,那么只需从视图中删除此行即可。