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メソッドに戻りますか?
この部分をクリアするのを手伝ってください。
あなたはかなり混乱しています。 ViewBag
を介してウェルカムビューに値を送信しています。そして、ビューの処理が完了すると、このアクションを呼び出した人にビューを再調整します。
台詞
_ ViewBag.Message = "Hello " + name;
ViewBag.NumTimes = numTimes;
_
ウェルカムビューで使用されるViewBag
値を設定します。
その後
_ return View();
_
Welcome
_Action.
_をリクエストしたユーザーにWelocmeビューを返します
return View()
は基本的に、Controller
のインスタンスを返すViewResult
クラス内の関数です。
のような
_ ViewResult view=new ViewResult();
return view;
_
または単に
_ return View()
_
ViewBagの詳細
ASP.NET MVCのViewBagのしくみ
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);。
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);
}
ステートメントreturn View()
はViewBagを返しません。デフォルトでは、アクション名と同じ名前のビューを返すか、return View("myView")
のようにビュー名を明示的に指定した場合は、myView.cshtmlなどのカスタムビューを返します。
一方、ViewBagは、コントローラーからビューにデータを渡すための単なる方法です。
viewBag.MessageとViewBag.NumTimesをウェルカムビューに戻します
これを言うと、ビューにViewBag.Message
とViewBag.NumTimes
の値を使用できるようになります。
return View()
は、View
Welcomeに対してAction
(つまり、Welcome.cshtmlまたはWelcome.aspx)を返します。
Viewbag
にプロパティを設定することで、HTMLに沿って使用できるView
に値を渡すことができます。