MVC Next Button功能

时间:2014-04-02 13:50:12

标签: c# asp.net-mvc razor

我是MVC的新手,我仍然有WPF的心态。 我有一个控制器,它返回一个ID作为参数的模型。

我想通过按剃须刀视图中的按钮来增加该参数,并重新加载具有该新Id的另一个模型。

我尝试过类似的事情:

    public ActionResult Game() {        

        SequenceViewModel model = new SequenceViewModel(CardModelList, SelectedSequenceID);

        return View(model);
    }

并在该按钮上执行其他操作:

   public ActionResult Press()
    {
        SelectedSequenceID ++;         
       return RedirectToAction("Game", "Game");
    }

即使我的SelectedSequenceID接缝设置为OK,模型仍然具有旧值。

我的做法完全错了吗?

谢谢, 尤利亚

2 个答案:

答案 0 :(得分:1)

您不想在控制器中增加ID,只需要指向视图中下一个ID的链接!

MVC比webforms更接近HTTP理想,HTTP是无状态的,所以你需要假设在页面请求周期之间不保留状态(好吧你可以使用session,cookies等来做,但只有保留绝对必要的东西!)

请记住,默认路由将采用参数" id"来自url / controller / action / id,因此示例控制器可能看起来像

public class GamesController : Controller
{
  // eg. /Games/Game/1
  public ActionResult Game(int id){
    var SequenceModel = SequenceRepository.GetSequenceById(id); //some way of getting your model from the ID
    return View(SequenceModel);
  }
}

在视图中,您需要添加导航链接

@Html.ActionLink("Next", "Game", new {@id = Model.id + 1})

或作为按钮:

<input type="button" value="Next" onclick="@Html.Raw("location.href='" + Url.Action("Next", new {@id = Model.id + 1}) + "';")" />

答案 1 :(得分:0)

有很多方法,但有一种可能是这样的:

[HttpPost]
public ActionResult Press(string nextStep)
{
    // not sure what this functionality does...
    //SelectedSequenceID ++;         
    //return RedirectToAction("Game", "Game");

    switch (step)
    {
        case "Intro":
            // call method to run intro method or redirect to intro action
            break;
        default:
            // return to start
            break;
    }
}

然后,将其放在您的剃须刀视图中,并使用相应的名称:

<input type="submit" name="submitButton" value="Intro" />