我是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视图。或欢迎视图的值返回到欢迎方法?
请帮我清除这一部分。
答案 0 :(得分:3)
你很困惑。您正通过ViewBag
向欢迎视图发送值。一旦处理完视图,您就会将其重新调整为已调用此操作的人。
行
ViewBag.Message = "Hello " + name;
ViewBag.NumTimes = numTimes;
设置Welcome视图使用的ViewBag
值。
然后
return View();
将Welocme视图返回给已请求Welcome
Action.
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.Message
和ViewBag.NumTimes
的值用于您的视图。
答案 4 :(得分:1)
语句return View()
不返回ViewBag。默认情况下,它返回一个与您的操作名称同名的视图,或者如果您明确提供视图名称return View("myView")
另一方面,ViewBag只是一种将数据从控制器传递到视图的方法。
答案 5 :(得分:1)
return View()
将返回View
欢迎的Action
(即Welcome.cshtml或Welcome.aspx)。
通过在Viewbag
中设置属性,您只需将值传递给View
即可在HTML中使用。