使用变量/参数创建视图

时间:2012-12-24 04:26:30

标签: asp.net-mvc-3 variables view

我有一个用户填写的表单,然后定向到包含输入数据的视图。如何创建此视图,以便它使用初始化为用户输入的变量。视图应该如何。我已阅读有关将参数传递给视图的信息,但我需要一种方法来创建它,然后分配传递给视图中每个变量的参数。

编辑:来自Brian Roger的例子

说有个型号

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)
}

1 个答案:

答案 0 :(得分: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教程,例如these。希望这会有所帮助。

编辑:过时以显示从一个视图获取数据并将其显示在另一个视图中的示例

这是更新的控制器类:

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" />
}

这是显示第一个视图中数据的第二个视图(Views / Test / Example2.cshtml):

@model MyModel

<h2>Example view that displays data from another view</h2>
<p>You entered "@Model.Name".</p>