混淆ASP.NET MVC4中的返回View()方法

时间:2014-03-03 08:51:01

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

我是ASP.NET MVC4的新手。我正在阅读本教程http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/adding-a-view。我不清楚返回View()方法。要将数据从视图发送到控制器,我已使用此代码

 public ActionResult Index()
    {
        return View();
    }

这里返回View()方法将数据从视图返回到控制器。 要从控制器发送数据到视图,我已使用此代码

public ActionResult Welcome(string name, int numTimes = 1)
    {
        ViewBag.Message = "Hello " + name;
        ViewBag.NumTimes = numTimes;
        return View();

    }

这是我的困惑点。返回View()方法是否将ViewBag.Message和ViewBag.NumTimes返回到Welcome视图。或欢迎视图的值返回到欢迎方法?

请帮我清除这一部分。

6 个答案:

答案 0 :(得分:3)

你很困惑。您正通过ViewBag向欢迎视图发送值。一旦处理完视图,您就会将其重新调整为已调用此操作的人。

 ViewBag.Message = "Hello " + name;
 ViewBag.NumTimes = numTimes;

设置Welcome视图使用的ViewBag值。
然后

 return View();

将Welocme视图返回给已请求Welcome Action.

的用户

编辑1

return View()基本上是Controller类中的一个函数,它返回ViewResult的实例

就像

 ViewResult view=new ViewResult();
 return view;

或只是

 return View()

有关ViewBag的更多信息 How ViewBag in ASP.NET MVC works

答案 1 :(得分:3)

在asp.net MVC中如果要将数据从操作发送到视图,您可以发送样本中使用的数据类型或viewbag / viewdata,看看:

 public ActionResult Welcome(string name, int numTimes = 1)
    {
        ViewBag.Message = "Hello " + name;
        ViewBag.NumTimes = numTimes;
        return View();
    }

您可以在视图中看到类似内容:

@ViewBag.Message 
@ViewBag.NumTimes 

但是,ViewBag和ViewData仅用于从操作向视图发送信息,为了将视图发送到操作,您应该传递类型(Model或viewModel):

 public ActionResult Welcome(string name, int numTimes = 1)
    {
      var model = new List<ModelClass>
            {
                new ModelClass{name="name",numTimes=1}
            };
        return View(model);
    }

所以在你的视图中你应该绑定模型:

@model List<ModelClass>
@foreach(var item in Model)
{
     // show you items
}

最后当你想要将模型传递给行动时,你必须这样做:

[httpPost]
 public ActionResult Welcome(ModelClass modelClass)
    {
       if(ModelState.isValid)
       {
             // operation on your data 
       }
        return View(model);
    }

答案 2 :(得分:3)

public ActionResult Welcome(string name, int numTimes = 1)

此函数签名表示“action”方法返回一些结果(如您所见,返回类型为ActionResult)。这是一个抽象类,告诉ASP.NET MVC如何将该结果写入Response。您应该探索不同类型的操作结果:

http://msdn.microsoft.com/en-us/library/system.web.mvc.actionresult(v=vs.118).aspx

这些不同类型的动作结果是ActionResult的子类,如HttpStatusCodeResult,JsonResult或RedirectResult。如果你返回View(),你只需返回一个告诉ASP.NET MVC它应该呈现cshtml页面的对象,如果你返回HttpNotFound();例如,浏览器将获得404.您可以通过返回System.Web.Mvc.Controller的方法结果来尝试几种返回值,例如:

return View("OtherViewName"); // If you have an OtherViewName.cshtml file
return RedirectToAction("OtherAction"); // If you have an action called OtherAction
return HttpNotFound();
return new HttpStatusCodeResult(500);
// if you are familiar with JSON:
return Json(1, JsonRequestBehavior.AllowGet);
return Json(new int[2] {1, 2}, JsonRequestBehavior.AllowGet);
return Json(new {A="A", B=123}, JsonRequestBehavior.AllowGet);

如果您正在寻找更详细的说明,请查看此页:

http://msdn.microsoft.com/en-us/library/dd410269(v=vs.100).aspx

这些只是辅助函数,可以填充请求的响应。没有它们,您必须编写Response.OutputStream从cshtml文件解析的内容,并填充ViewBag的属性,您甚至必须设置HTTP标头,如Response.ContentType和Response.AddHeader(“Content-长度“,123213);。

答案 3 :(得分:1)

  

将ViewBag.Message和ViewBag.NumTimes返回到欢迎视图

说到这一点,您现在可以将ViewBag.MessageViewBag.NumTimes的值用于您的视图。

答案 4 :(得分:1)

语句return View()不返回ViewBag。默认情况下,它返回一个与您的操作名称同名的视图,或者如果您明确提供视图名称return View("myView")

,则返回自定义视图,如myView.cshtml

另一方面,ViewBag只是​​一种将数据从控制器传递到视图的方法。

答案 5 :(得分:1)

return View()将返回View欢迎的Action(即Welcome.cshtml或Welcome.aspx)。

通过在Viewbag中设置属性,您只需将值传递给View即可在HTML中使用。