web-dev-qa-db-ja.com

ASP.NET MVC 4のreturnView()メソッドについて混乱しています

ASP.NETMVC4は初めてです。私はこのチュートリアルを読んでいます http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/adding-a-view 。 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();

    }

これが私の紛らわしい点です。 return View()メソッドはViewBag.MessageとViewBag.NumTimesをウェルカムビューに返しますか? OR Welcomeビューの値はWelcomeメソッドに戻りますか?

この部分をクリアするのを手伝ってください。

9
Bir

あなたはかなり混乱しています。 ViewBagを介してウェルカムビューに値を送信しています。そして、ビューの処理が完了すると、このアクションを呼び出した人にビューを再調整します。

台詞

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

ウェルカムビューで使用されるViewBag値を設定します。
その後

_ return View();
_

Welcome _Action._をリクエストしたユーザーにWelocmeビューを返します

編集1

return View()は基本的に、Controllerのインスタンスを返すViewResultクラス内の関数です。

のような

_ ViewResult view=new ViewResult();
 return view;
_

または単に

_ return View()
_

ViewBagの詳細
ASP.NET MVCのViewBagのしくみ

3
शेखर
public ActionResult Welcome(string name, int numTimes = 1)

この関数シグネチャは、「action」メソッドが何らかの結果を返していることを示します(戻り値の型ActionResultを確認できます)。これは、ASP.NETMVCにその結果を応答に書き込む方法を指示する抽象クラスです。さまざまなタイプのアクション結果を調べる必要があります。

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

これらのさまざまな種類のアクション結果は、HttpStatusCodeResult、JsonResult、RedirectResultなどのActionResultのサブクラスです。 View()を返す場合は、HttpNotFound();を返す場合に、cshtmlページをレンダリングする必要があることをASP.NETMVCに通知するオブジェクトを返すだけです。たとえば、ブラウザは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

これらは、リクエストの応答を満たす単なるヘルパー関数です。それらがないと、cshtmlファイルから解析され、ViewBagのプロパティが入力されたコンテンツをResponse.OutputStreamに書き込む必要があります。また、Response.ContentTypeやResponse.AddHeader( "Content-長さ "、123213);。

3
adhie

Asp.net MVCで、アクションからビューにデータを送信する場合は、サンプルで使用したデータの種類またはビューバッグ/ビューデータを送信できます。以下を参照してください。

 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);
    }
3
Ehsan

ステートメントreturn View()はViewBagを返しません。デフォルトでは、アクション名と同じ名前のビューを返すか、return View("myView")のようにビュー名を明示的に指定した場合は、myView.cshtmlなどのカスタムビューを返します。

一方、ViewBagは、コントローラーからビューにデータを渡すための単なる方法です。

2
jarnail

viewBag.MessageとViewBag.NumTimesをウェルカムビューに戻します

これを言うと、ビューにViewBag.MessageViewBag.NumTimesの値を使用できるようになります。

1
geno

return View()は、ViewWelcomeに対してAction(つまり、Welcome.cshtmlまたはWelcome.aspx)を返します。

Viewbagにプロパティを設定することで、HTMLに沿って使用できるViewに値を渡すことができます。

1
MysticEarth