我是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,因为它受到约束?
答案 0 :(得分:2)
我真的不明白你的问题。逐步澄清:
这是从您提到的表单提交时的视图调用的操作方法。如果你的视图有两个字段的名称和密码,我猜你的模型Stories就是这样的(我猜你正在谈论两种形式,因为你的登录模型不叫故事,但有了我所掌握的信息,我试图澄清一些事情):
public class Stories
{
public string name { get; set; }
public string password { get; set; }
}
如果你的帖子被正确提交,那么对象Stories st应该具有用户的输入值。
对象Stories s2在您的操作中实例化,并且永远不会向对象赋值。这样的事情:
s2.name = "something";
s2.password = "somethingElse"
所以应该清楚为什么它是null。否则你可以像这样实例化对象:
Stories s2 = new Stories(){ name = "something", password = "somethingElse"}
因为对于您返回的视图,您不需要模型或任何值,并且您只返回一个视图,其中包含您不必使用对象的Viewbag值作为参数。如果你的View" AddStories"正在使用这个模型
@model Stories
在开始时你必须传递一个模型。但是,如果您实际上没有像您所暗示的那样使用模型的任何值,那么只需从视图中删除此行即可。