如果控制器被强绑定到视图,为什么需要模型参数?



我是MVC的新手,在过去的4年里一直在使用web表单,但最近转到了MVC,我发现这很不一样。

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

当我填充前端的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. 这是一个在提交您提到的表单时从视图中调用的操作方法。如果你的视图有两个字段名称和密码,我想你的模型Stories是这样的(我想你说的是两个表单,因为你的登录模型不叫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"
    

所以应该清楚它为空的原因。否则,您可以实例化这样的对象:

Stories s2 = new Stories(){ name = "something", password = "somethingElse"}
  1. 由于您返回的视图不需要模型或任何值,并且您只返回具有Viewbag值的视图,因此不必将对象Stories用作参数。如果您的View"AddStories"使用的是像这样的模型

    @model Stories
    

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

最新更新