我几天前就开始学习MVC了。据我所知,我做了一个小样本程序。但是我一直在怀疑。我在下面发布我的疑惑和代码。请帮我清楚地理解。
在这里,我创建了四个视图和控制器以及一个学生班。
StudentClass
public class Student
{
public string Name { get; set; }
public string Age { get; set; }
public string Place { get; set; }
}
ViewOne
@model MyTestMVCApp.Models.Student
@{
ViewBag.Title = "ViewOne";
}
@using (Html.BeginForm())
{
<table style="border-color:Black;">
<tr>
<td>Name</td><td>Age</td><td>Place</td>
</tr>
<tr>
<td>--</td><td>--</td><td>--</td>
</tr>
</table>
<label>Enter Name : </label>
@Html.TextBoxFor(model => model.Name, new { name = "name"});
<input name="submit" type="submit" id="btnStart" class="button" value="Start Filling Details" />
ViewTwo.cshtml
@model MyTestMVCApp.Models.Student
@{
ViewBag.Title = "ViewTwo";
}
@using (Html.BeginForm())
{
<table style="border-color:Black;">
<tr>
<td>Name</td><td>Age</td><td>Place</td></tr>
<tr>
<td>@Model.Name</td><td>@Model.Age</td><td>@Model.Place</td>
</tr>
</table>
<label>Enter Age : </label>
@Html.TextBoxFor(model => model.Age, new { name = "age" });
<input name="submit" type="submit" id="btnNext" class="button" value="Next" />
}
ViewThree.cshtml
@model MyTestMVCApp.Models.Student
@{
ViewBag.Title = "ViewThree";
}
@using (Html.BeginForm())
{
<table style="border-color:Black;">
<tr><td>Name</td><td>Age</td><td>Place</td></tr>
<tr><td>@Model.Name</td><td>@Model.Age</td><td>@Model.Place</td></tr>
</table>
<label>Enter Age : </label>
@Html.TextBoxFor(model => model.Place, new { name = "place" });
<input name="submit" type="submit" id="btnNext" class="button" value="Next" />
}
ViewFour.cshtml
@model MyTestMVCApp.Models.Student
@{
ViewBag.Title = "ViewFour";
}
@{
<table style="border-color:Black;">
<tr><td>Name</td><td>Age</td><td>Place</td></tr>
<tr><td>@Model.Name</td><td>@Model.Age</td><td>@Model.Place</td></tr>
</table>
}
MyViewController.cs
public class MyViewController : Controller
{
public ActionResult ViewOne()
{
Student student = new Student();
return View(student);
}
[HttpPost]
public ActionResult ViewOne(Student student)
{
return View("ViewTwo", student);
//return RedirectToAction("ViewTwo",student);
}
[HttpPost]
public ActionResult ViewTwo(Student student)
{
return View("ViewThree", student);
//return RedirectToAction("ViewThree", student);
}
[HttpPost]
public ActionResult ViewThree(Student student)
{
return View("ViewFour", student);
}
}
我的疑惑
怀疑1 。在按钮上单击ViewTwo,
[HttpPost]
public ActionResult ViewOne(Student student)
{
}
正在调试而不是ViewTwo的[HttpPost] actionresult ..为什么?
怀疑2 。如何将我在ViewOne中创建的学生对象的同一实例传递给所有其他视图,因为我的需要是
在ViewOne上,我获得学生的'name'属性,然后将同一个对象传递给ViewTwo。
在ViewTwo上,我得到学生的'age'属性,然后我将同一个对象传递给ViewThree
在ViewThree上,我得到学生的'place'属性,然后我将同一个对象传递给ViewFour。
在ViewFour上,我显示了通过上述视图获得的学生的所有值。
答案 0 :(得分:1)
因为你是从ViewOne
打来的。如果你想执行ViewTwo
动作,那么使用如下
@using (Html.BeginForm("ViewTwo", "MyView", FormMethod.Post))
答案 1 :(得分:1)
看起来它是视图定义,你错过了一点点逻辑。
你在回发时遇到ViewOne的原因是因为你没有设置它回发的形式的值。
所以在您需要的ViewOne.cshtml
和后续视图中
@Html.BeginForm("ViewTwo","MyViewController")
{
//View code
}
如果您没有在begin表单的调用中提供它,HTML.BeginForm将使用RouteData进行呈现。
答案 2 :(得分:1)
看起来你正在从ViewOne的post post返回ViewTwo。当您这样做时,您仍然会路由到ViewOne操作。即使您正在返回ViewTwo,下面的代码也会在地址栏中显示为ViewOne。看起来你有一个正确的想法,你有一个RedirectToAction调用,但你没有ViewTwo动作的HttpGet。
[HttpPost]
public ActionResult ViewOne(Student student)
{
return View("ViewTwo", student);
//return RedirectToAction("ViewTwo",student);
}
另一个选项,这可能对你有用,因为你试图传递你的Student对象,就是使用RedirectToRoute传递学生名,id或其他识别项,作为路径中的参数。所以uri最终会看起来像这样:../ MyView / ViewTwo / Joe