Razor MVC在一个小样本程序中表示怀疑

时间:2013-07-03 11:36:18

标签: c# asp.net-mvc asp.net-mvc-3 razor

我几天前就开始学习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上,我显示了通过上述视图获得的学生的所有值。

3 个答案:

答案 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