[英]modelstate.isvalid return false in edit view only using asp.net mvc4
[英]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.
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.Message
和ViewBag.NumTimes
的值用于View。
return View()
将返回Action
Welcome的View
(即Welcome.cshtml或Welcome.aspx)。
通过在Viewbag
设置属性,您只需将值传递给View
,该View
可以在HTML中使用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.