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