2

ユーザーが入力したフォームがあり、入力されたデータを含むビューに移動します。ユーザーの入力に対して初期化された変数を使用するように、このビューを作成するにはどうすればよいですか。ビューはどのように見えるべきですか。ビューへのパラメーターの受け渡しについて読みましたが、ビューを作成してから、ビュー内の各変数に渡されるパラメーターを割り当てる方法が必要です。

編集:ブライアンロジャーの例から

モデルを持っていると言う

public class MyModel
{
    public string Name { get; set; }
}

そして、次のようなビュー(modと呼ばれる別のモデルを使用)

@using (Html.BeginForm("Example", "Test", FormMethod.Get))
  {
     <input type="text" name="Name" value="@Model.Name" />
      <input type="submit" value="Go" />
 }

フォームに入力したら、データを取得して別のビューview2に表示したいと思います

@model MyModel
@{
   Layout = "~/Views/Shared/_Layout.cshtml";
 }

<h2>Example of passing data between the view and controller using a model</h2>
 @if (string.IsNullOrEmpty(Model.Name))
  {
    <p>Enter your name below and click Go.</p>
  }
 else
 {
    <p>You entered "@Model.Name".
 }

送信ボタンのコントローラーは次のようになります

public ActionResult Example(MyModel model)
{
    model.Name = mod.Name;
    return View("view2", model);
}

mod.Nameの値は正しいですが、新しいビューに渡されません

編集2:

そして、view2のコントローラーは次のようになります

public ActionResult view2(MyModel model)
{
  return View(model)
}
4

1 に答える 1

2

MVC3 では、ビューとの間で値をやり取りするために、モデル オブジェクトを使用します。モデル オブジェクトは、いくつかのプロパティを含む単なる C# クラスです。コントローラーで、アクション メソッドにモデルをパラメーターとして受け入れさせ、必要に応じて処理を行ってから、更新されたモデルを ActionResult の一部としてビューに返します。ビューでは、ビューの Model プロパティを介してモデル オブジェクトを参照できます。

これは不自然な例です。

モデルクラス:

public class MyModel
{
    public string Name { get; set; }
}

コントローラ クラス:

public class TestController : Controller
{
    public ActionResult Example(MyModel model)
    {
        if (model == null)
        {
            model = new MyModel();
        }
        return View(model);
    }
}

ビュー (これは Test/Example.cshtml になります):

@model MyModel
@{
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<h2>Example of passing data between the view and controller using a model</h2>
@if (string.IsNullOrEmpty(Model.Name))
{
    <p>Enter your name below and click Go.</p>
}
else
{
    <p>You entered "@Model.Name".  If you want to change it, 
       enter a new name below and click Go.</p>
}
@using (Html.BeginForm("Example", "Test", FormMethod.Post))
{
    <input type="text" name="Name" value="@Model.Name" />
    <input type="submit" value="Go" />
}

@model ディレクティブは、モデル クラスが であることをビューに伝えますMyModel。そのため、ビューの Model プロパティを介してそのプロパティを参照できます。フォーム コントロールにモデル クラスのプロパティと同じ名前を付けて、フォームの送信時にモデルをコントローラーに渡すときに、MVC フレームワークが値をモデル オブジェクトに戻すようにします。

より詳細な例については、次のような MVC チュートリアルを確認してください。お役に立てれば。

編集:あるビューからデータを取得し、別のビューに表示する例を示すように更新されました

更新されたコントローラー クラスは次のとおりです。

public class TestController : Controller
{
    // This method corresponds to the first view which just displays an empty form
    public ActionResult Example()
    {
        MyModel model = new MyModel();
        return View(model);
    }

    // This method corresponds to the second view which displays the data
    public ActionResult Example2(MyModel model)
    {
        return View(model);
    }
}

フォームを表示する最初のビュー (Views/Test/Example.cshtml) を次に示します。Example2コントローラーのメソッドに投稿する方法に注目してください。

@model MyModel

<h2>Example view with a form</h2>
<p>Enter your name below:</p>
@using (Html.BeginForm("Example2", "Test", FormMethod.Post))
{
    <input type="text" name="Name" value="@Model.Name" />
    <input type="submit" value="Go" />
}

最初のビューからのデータを表示する 2 番目のビュー (Views/Test/Example2.cshtml) を次に示します。

@model MyModel

<h2>Example view that displays data from another view</h2>
<p>You entered "@Model.Name".</p>
于 2012-12-24T05:06:03.447 に答える