繁体   English   中英

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

[英]Confuse about return View() method in ASP.NET MVC4

我是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视图。 或欢迎视图的值返回到欢迎方法?

请帮我清除这一部分。

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

线条

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

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

 return View();

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

编辑1

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

它像是

 ViewResult view=new ViewResult();
 return view;

或者干脆

 return View()

有关ViewBag的更多信息
ASP.NET MVC中的ViewBag如何工作

在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);
    }
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);.

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

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

将ViewBag.Message和ViewBag.NumTimes返回到Welcome视图

ViewBag.Message ViewBag.NumTimes ,您现在可以将ViewBag.MessageViewBag.NumTimes的值用于View。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM