Путать метод return View() в ASP.NET MVC4

Я новичок в ASP.NET MVC4 . Я читаю этот учебник http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/adding-a-view . Я не совсем понимаю метод return View (). Чтобы отправить данные из вида на контроллер, я использовал этот код

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

здесь метод return View () возвращает данные из представления в контроллер. Чтобы отправить данные с контроллера на просмотр, я использовал этот код

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

    }

вот моя запутанная точка зрения. Это возвращение View () метод возврата ViewBag.Сообщение и ViewBag.NumTimes для представления приветствия. Или значение Welcome view возвращается к методу Welcome?

пожалуйста, помогите мне очистить эту часть.

6 ответов


вы совершенно сбиты с толку. Вы отправляете значения через ViewBag на вид. И как только обработка зрения завершена, вы перенастраиваете ее на того, кто вызвал это действие.

строки

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

задание ViewBag значение, которое используется в представлении приветствия.
а то

 return View();

вернет представление Welocme пользователю, который запросил Welcome Action.

изменить 1

return View() is в основном функция внутри Controller класс, который возвращает экземпляр ViewResult

это как

 ViewResult view=new ViewResult();
 return view;

или просто

 return View()

подробнее о ViewBag
как ViewBag в ASP.NET MVC работает


In asp.net MVC если вы хотите отправить данные из action в view, вы можете отправить тип данных или 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 предназначены только для отправки информации из действия в представление, а для отправки представления в действие вы должны передать тип (модель или 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, как записать этот результат в ответ. Вы должны изучить различные типы результатов действий:

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. Вы можете попробовать несколько видов возвращаемых значений, возвращая результаты метод.Сеть.В MVC.Контроллер, например:

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=против 100).aspx

это просто вспомогательные функции, которые заполнят ответ на запрос. Без них вам пришлось бы написать ответ.OutputStream содержимое, которое анализируется из файла cshtml и заполняется свойствами ViewBag, и вам даже придется установить HTTP-заголовки, такие как Response.ContentType и ответ.AddHeader ("Content-Length", 123213);.


вернуться ViewBag.Сообщение и ViewBag.NumTimes для представления приветствия

говоря это, теперь вы можете использовать значения ViewBag.Message и ViewBag.NumTimes на ваш взгляд.


заявление return View() не возвращает ViewBag. По умолчанию он возвращает представление с тем же именем, что и имя действия, или пользовательское представление say myView.cshtml, если вы явно предоставляете имя представления, например return View("myView")

С другой стороны ViewBag-это просто способ передачи данных из контроллера в представление.


return View() вернет View (т. е. Добро пожаловать.cshtml или Добро пожаловать.aspx) для элемента Action Добро пожаловать.

свойства в элементе Viewbag вы можете просто передать значения View который можно использовать там вдоль вашего HTML.