0

几天前我刚开始学习MVC。据我所知,我做了一个小示例程序。但我一直面临一些疑问。我在下面发布我的疑问和代码。请帮助我清楚地理解它。

在这里,我创建了四个视图和控制器以及一个学生类。

学生班

 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 中创建的学生对象的相同实例传递给所有其他 Views ,因为我的需要是

在 ViewOne 上,我获得学生的“姓名”属性,然后将相同的对象传递给 ViewTwo。
在 ViewTwo 上,我获得了学生的“年龄”属性,然后将相同的对象传递给 ViewThree。
在 ViewThree 上,我获得了学生的“地点”属性,然后将相同的对象传递给 ViewFour。
在 ViewFour 上,我显示了通过上述视图获得的学生的所有价值观。

4

3 回答 3

1

因为你是从ViewOne. 如果你想执行ViewTwoAction 然后使用如下

 @using (Html.BeginForm("ViewTwo", "MyView", FormMethod.Post))
于 2013-07-03T11:51:47.750 回答
1

看起来您正在从 ViewOne 的发布操作中返回 ViewTwo。当您这样做时,您仍在路由到 ViewOne 操作。下面的代码将在您的地址栏中显示为 ViewOne,即使您返回的是 ViewTwo。看起来你有一个正确的想法,你有一个 RedirectToAction 调用,但你没有 ViewTwo 操作的 HttpGet 。

[HttpPost]
public ActionResult ViewOne(Student student)
{
    return View("ViewTwo", student);
    //return RedirectToAction("ViewTwo",student);
}

另一种选择,这可能对您有用,因为您正在尝试传递 Student 对象,这将是使用 RedirectToRoute 您将 Student 名称、id 或其他标识项作为路由中的参数传递。所以 uri 最终会看起来像这样:../MyView/ViewTwo/Joe

于 2013-07-03T12:34:25.690 回答
1

看起来您错过了一点逻辑的视图定义。

您在回发时点击 ViewOne 的原因是您没有设置它回发到的表单的值。

所以在你ViewOne.cshtml和随后的观点中,你需要

@Html.BeginForm("ViewTwo","MyViewController")
{
 //View code
}

如果您没有在开始表单的调用中提供 HTML.BeginForm,它将与 RouteData 一起呈现。

于 2013-07-03T11:52:08.123 回答